O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

TDC2016 | Trilha PHP - Xdebug: Seus problemas acabaram!

125 visualizações

Publicada em

Xdebug: Seus problemas acabaram!

Publicada em: Educação
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

TDC2016 | Trilha PHP - Xdebug: Seus problemas acabaram!

  1. 1. xdebug Seus problemas acabaram Vitor Mattos
  2. 2. 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
  3. 3. Desenvolvedor PHP desde 2003 Amante de opensource Evangelista PHP PHPRio ( http://telegram.me/phprio ) Contatos: http://telegram.me/VitorMattos Quem sou eu?
  4. 4. != Por uma vida mais saudável O que é o xdebug?
  5. 5. 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
  6. 6. Porque usar xdebug? Debugando sem xdebug
  7. 7. Porque usar xdebug? Debugando sem xdebug <?php echo $variavel; echo '<pre>'; var_dump($um_array); echo '</pre>'; print_r($mais_uma); error_log('passei aqui', 3, '/var/log/app/meu.log'); exit();
  8. 8. 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
  9. 9. 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
  10. 10. Instalação - repositório Funciona 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
  11. 11. Conferindo instalação ~$ php -v PHP 7.0.8-0ubuntu0.16.04.2 (cli) ( NTS ) Copyright (c) 1997-2016 The PHP Group Zend 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
  12. 12. Instalação - PECL ~$ sudo pecl install xdebug
  13. 13. Conferindo instalação ~$ php -v PHP 7.0.8-0ubuntu0.16.04.2 (cli) ( NTS ) Copyright (c) 1997-2016 The PHP Group Zend 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
  14. 14. 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
  15. 15. Conferindo instalação ~$ php -v PHP 7.0.8-0ubuntu0.16.04.2 (cli) ( NTS ) Copyright (c) 1997-2016 The PHP Group Zend 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
  16. 16. 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
  17. 17. Arquivo de configuração - xdebug.ini zend_extension=xdebug.so [xdebug] xdebug.default_enable=on xdebug.remote_enable=on xdebug.remote_autostart=on xdebug.profiler_output_name = cachegrind.out.%u.%s.%R xdebug.profiler_enable = 0 xdebug.remote_port=9000 xdebug.remote_handler=dbgp xdebug.remote_mode=req xdebug.remote_host=127.0.0.1 xdebug.remote_log=/tmp/xdebug.log ;xdebug.remote_host=remote.mypage.com xdebug.scream=0 xdebug.cli_color=On xdebug.var_display_max_depth=10 xdebug.var_display_max_children=200 xdebug.overload_var_dump = 1 xdebug.show_exception_trace = Off xdebug.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
  18. 18. Variáveis amigáveis - browser O xdebug faz isto...
  19. 19. Variáveis amigáveis - browser
  20. 20. Variáveis amigáveis - browser Virar isto!
  21. 21. Variáveis amigáveis - browser E ainda pode melhorar!
  22. 22. Variáveis amigáveis - browser xdebug.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
  23. 23. Variáveis amigáveis - cli zend_extension=xdebug.so [xdebug] xdebug.default_enable=on xdebug.cli_color=On xdebug.var_display_max_depth=10 xdebug.var_display_max_children=200 xdebug.overload_var_dump=1
  24. 24. 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_trace http://php.net/manual/language.operators.errorcontrol.php
  25. 25. Evitando falhas de recursividade xdebug.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 2 PHP Stack trace: PHP 1. {main}() /home/vitor/projetos/palestra-xdebug/recursive.php:0 PHP 2. a() /home/vitor/projetos/palestra-xdebug/recursive.php:5 PHP 3. a() /home/vitor/projetos/palestra-xdebug/recursive.php:3
  26. 26. Debugando ao vivo DBGp - 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
  27. 27. 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
  28. 28. Xdebug no Eclipse
  29. 29. Xdebug no Eclipse 1
  30. 30. Xdebug no Eclipse 2 1 3 4
  31. 31. Xdebug no Eclipse 3 2 1
  32. 32. Xdebug no Eclipse 1 2 3 4 5
  33. 33. Arquivo de configuração - xdebug.ini zend_extension=xdebug.so [xdebug] xdebug.default_enable=on xdebug.remote_autostart=on OBS: TDD + PHPUnit também é importante!
  34. 34. Ações ao debugar Set breakpoint Step into Step opver Step return Run to cursor Resume Terminate
  35. 35. Habilitando e desabilitando Algumas 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
  36. 36. Quero ver ao vivo! Talk is cheap. Show me the code. - Linus Torvalds #Show M eTheC ode
  37. 37. Coverage ./vendor/bin/phpunit --coverage-html coverage
  38. 38. Profiling Profiler integrado do Xdebug que permite encontrar gargalos no script e visualizá-los com uma ferramenta externa, como PHP Webgrind, MacAllGrind, kcachegrind ou WinCacheGrind.
  39. 39. Profiling xdebug.ini xdebug.profiler_output_name = cachegrind.out.%u.%s.%R xdebug.profiler_enable = 1 ~$ apt-get install python graphviz ~$ git clone https://github.com/jokkedk/webgrind ~$ cd webgrind ~$ composer install ~$ php -S localhost:8000
  40. 40. Profiling - webgrind
  41. 41. Profiling - webgrind - gráfico de chamadas
  42. 42. Profiling - kcachegrind
  43. 43. Perguntas vitor.mattos@phprio.org linkedin.com/in/vitormattos telegram.me/vitormattos

×