Xdebug seus problemas acabaram - TDC - PHPeste
-
Upload
vitor-mattos -
Category
Technology
-
view
310 -
download
1
Transcript of Xdebug seus problemas acabaram - TDC - PHPeste
xdebug
Seus problemas acabaramVitor Mattos
Falaremos sobre:Sumário:
● O que é o xdebug?● Porque usar o xdebug?● Instalação● Primeiros passos
○ Variáveis amigáveis○ Xdebug na linha de comando○ Removendo pogs
● Depurando em tempo real● Code coverage● Profiling
Desenvolvedor PHP desde 2003
Amante de opensource
Evangelista PHP
PHPRio ( http://telegram.me/phprio )
Contatos:
http://telegram.me/VitorMattos
Quem sou eu?
!=Por uma vida mais saudável
O que é o xdebug?
O que é o xdebug?O Xdebug é uma extensão que te ajuda a depurar seus scripts fornecendo uma grande quantidade de informações valiosas.
● Disponível desde 2002● Desenvolvido por Derick Rethans● Extensão para o PHP● Escrita em C● Open source● Usado para debugar e otimizar aplicações● Utiliza o protocolo DBGp (DeBugGer Protocol) para comunicação● Te permite fazer profiling da aplicação● Análise de cobertura de código
Porque usar xdebug?Debugando sem xdebug
Porque usar xdebug?Debugando sem xdebug
<?phpecho $variavel;echo '<pre>';var_dump($um_array);echo '</pre>';print_r($mais_uma);error_log('passei aqui', 3, '/var/log/app/meu.log');exit();
Porque usar xdebug?Debugando sem xdebug
● Alterar algo na aplicação● Recarregar a página● Verificar como ficou● Modificar novamente o código● Imprimir mais variáveis● Repetir tudo novamente● Esquecer de limpar os debug ou de tirar um exit● Mandar para o chefe testar a aplicação
Porque usar xdebug?Debugando com xdebug
● Adicione um breakpoint● Execute a aplicação● Volte para a sua IDE e confira seu código● Confira o valor de variáveis em tempo real● Veja todo o backtrace de execução da aplicação
Dica: Faça testes unitários
Instalação - repositórioFunciona em qualquer ambiente que execute PHP, em distribuições Linux baseadas em Debian, faça da seguinte forma:
~$ sudo apt-get install php-xdebug
O manual completo da extensão você encontra em:
xdebug.org
Conferindo instalação~$ php -v
PHP 7.0.8-0ubuntu0.16.04.2 (cli) ( NTS )Copyright (c) 1997-2016 The PHP GroupZend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.8-0ubuntu0.16.04.2, Copyright (c) 1999-2016, by Zend Technologies with Xdebug v2.4.0, Copyright (c) 2002-2016, by Derick Rethans
Instalação - PECL~$ sudo pecl install xdebug
Conferindo instalação~$ php -v
PHP 7.0.8-0ubuntu0.16.04.2 (cli) ( NTS )Copyright (c) 1997-2016 The PHP GroupZend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.8-0ubuntu0.16.04.2, Copyright (c) 1999-2016, by Zend Technologies with Xdebug v2.4.1, Copyright (c) 2002-2016, by Derick Rethans
Instalação - código fonte~$ sudo apt-get install php phpize git
~$ git clone git://github.com/xdebug/xdebug.git
~$ cd xdebug/
~/xdebug$ phpize
~/xdebug$ ./configure --enable-xdebug
~/xdebug$ make
~/xdebug$ sudo make install
Conferindo instalação~$ php -v
PHP 7.0.8-0ubuntu0.16.04.2 (cli) ( NTS )Copyright (c) 1997-2016 The PHP GroupZend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.8-0ubuntu0.16.04.2, Copyright (c) 1999-2016, by Zend Technologies with Xdebug v2.5.0-dev, Copyright (c) 2002-2016, by Derick Rethans
Conferindo instalação~$ cat /etc/php/7.0/mods-available/xdebug.ini
zend_extension=xdebug.so
Em alguns casos colocar apenas o nome do binário dá problema, então, se tiver
problemas, coloque o caminho absoluto do binátio do xdebug
Arquivo de configuração - xdebug.inizend_extension=xdebug.so
[xdebug]xdebug.default_enable=onxdebug.remote_enable=onxdebug.remote_autostart=onxdebug.profiler_output_name = cachegrind.out.%u.%s.%Rxdebug.profiler_enable = 0xdebug.remote_port=9000xdebug.remote_handler=dbgpxdebug.remote_mode=reqxdebug.remote_host=127.0.0.1xdebug.remote_log=/tmp/xdebug.log;xdebug.remote_host=remote.mypage.comxdebug.scream=0xdebug.cli_color=Onxdebug.var_display_max_depth=10xdebug.var_display_max_children=200xdebug.overload_var_dump = 1xdebug.show_exception_trace = Offxdebug.trace_format = 1; for get memory usage, uncoment the following lines and run this script:; https://github.com/derickr/xdebug/raw/master/contrib/tracefile-analyser.php; xdebug.collect_return = 1; xdebug.auto_trace = 1; xdebug.show_mem_delta=1
Calma, vamos entrar em detalhes mais a frente.
Qualquer dúvida, consulte o manual:
https://xdebug.org/docs/all_settings
Variáveis amigáveis - browserO xdebug faz isto...
Variáveis amigáveis - browser
Variáveis amigáveis - browserVirar isto!
Variáveis amigáveis - browserE ainda pode melhorar!
Variáveis amigáveis - browserxdebug.dump.*
No * pode colocar COOKIE, FILES, GET, POST, REQUEST, SERVER, SESSION:
xdebug.dump.GET=*
E ainda pode filtrar:
xdebug.dump.SERVER=REMOTE_ADDR,REQUEST_METHOD
Variáveis amigáveis - clizend_extension=xdebug.so
[xdebug]xdebug.default_enable=onxdebug.cli_color=Onxdebug.var_display_max_depth=10xdebug.var_display_max_children=200xdebug.overload_var_dump=1
POG do desesperoÉ possível ocultar alguns erros no PHP com o @
Porém, é possível exibir novamente com o xdebug
xdebug.scream=1
http://xdebug.org/docs/stack_tracehttp://php.net/manual/language.operators.errorcontrol.php
Evitando falhas de recursividadexdebug.max_nesting_level=3
~/projetos/palestra-xdebug$ php recursive.php PHP Fatal error: Maximum function nesting level of '3' reached, aborting! in /home/vitor/projetos/palestra-xdebug/recursive.php on line 2PHP Stack trace:PHP 1. {main}() /home/vitor/projetos/palestra-xdebug/recursive.php:0PHP 2. a() /home/vitor/projetos/palestra-xdebug/recursive.php:5PHP 3. a() /home/vitor/projetos/palestra-xdebug/recursive.php:3
Debugando ao vivoDBGp - DeBugGer: protocolo de debugging
Cross-language: comum para várias linguagens (PHP, HHVM, Python, Perl,...)
Compatível com diversos clientes
Possibilidade de alterar valor de algumas variáveis variáveis em tempo de execução
Debugging remoto
Debugging condicional
Clientes● PHPEclipse (Editor Plugin).● JetBrain's PhpStorm (IDE; Commercial).● VIM plugin (Editor Plugin).● Emacs plugin (Editor Plugin).● NetBeans (IDE: Windows, Linux, Mac OS X and Solaris).● Notepad++ plugin (Editor: Windows).● Dev-PHP (IDE: Windows)● Eclipse plugin (IDE).● KDevelop (IDE: Linux (KDE); Open Source).● ActiveState's Komodo (IDE: Windows, Linux, Mac; Commercial).● …
https://xdebug.org/docs/remote
Xdebug no Eclipse
Xdebug no Eclipse
1
Xdebug no Eclipse
2
13
4
Xdebug no Eclipse
3
2
1
Xdebug no Eclipse
1
2
3
4
5
Arquivo de configuração - xdebug.inizend_extension=xdebug.so
[xdebug]xdebug.default_enable=onxdebug.remote_autostart=on
OBS: TDD + PHPUnit também é importante!
Ações ao debugarSet breakpoint
Step into
Step opver
Step return
Run to cursor
Resume
Terminate
Habilitando e desabilitandoAlgumas IDEs necessitam de dar start e stop para iniciar o debugging, existem extensões para diversos navegadores para fazer isto de forma prática. Caso não queira extensões, há outras formas de iniciar e parar para algumas IDE (GET, COOKIE) ou diretamente no arquivo ini
● Chrome○ Xdebug helper○ Xdebug enabler
● Firefox○ easy Xdebug○ The easiest Xdebug
● Safari○ Xdebug toogler
Quero ver ao vivo!
Talk is cheap.
Show me the code.- Linus Torvalds
#ShowMeTheCode
Coverage./vendor/bin/phpunit --coverage-html coverage
ProfilingProfiler integrado do Xdebug que permite encontrar gargalos no script e visualizá-los com uma ferramenta externa, como PHP Webgrind, MacAllGrind, kcachegrind ou WinCacheGrind.
Profilingxdebug.inixdebug.profiler_output_name = cachegrind.out.%u.%s.%Rxdebug.profiler_enable = 1
~$ apt-get install python graphviz~$ git clone https://github.com/jokkedk/webgrind
~$ cd webgrind
~$ composer install
~$ php -S localhost:8000
Profiling - webgrind
Profiling - webgrind - gráfico de chamadas
Profiling - kcachegrind
linkedin.com/in/vitormattostelegram.me/vitormattos