Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Depurando aplicações PHP like a BOSS

676 views

Published on

Gravação (vídeo) da palestra: https://www.infoq.com/br/presentations/depurando-aplicacoes-php-like-a-boss

Palestra apresentada nos seguintes eventos:

- DrupalCamp Campinas, em 25/06/2016;
- The Developers Conference (TDC) São Paulo, em 09/07/2016;
- PHP Conference Brazil, em 09/12/2016;
- PHPSP + Locaweb #3, em 18/02/2017.

Published in: Software
  • Be the first to comment

Depurando aplicações PHP like a BOSS

  1. 1. Depurando aplicações PHP like a BOSS Thiago Rodrigues Eng. de Software Sr. CI&T - PHPSP
  2. 2. Thiago Rodrigues Bacharel em Sistemas de Informação pela Universidade do Estado de Minas Gerais (UEMG); Engenheiro de Software Sênior na CI&T Programador PHP há 11 anos; Evangelista PHPSP e co-organizador do PHPSP Campinas Entusiasta do software livre Gammer
  3. 3. Depuração - O que é? Definição formal: Depuração (em inglês: debugging, debug) é o processo de encontrar e reduzir defeitos num aplicativo de software ou mesmo em hardware. [..] https://pt.wikipedia.org/wiki/Depuração ● diariamente despendemos esforço considerável ● é um processo analítico ● é um processo repetitivo ● é incremental (dividir para conquistar) ● pode haver muita pressão envolvida
  4. 4. Depuração - Habilidade necessária O bom desenvolvedor é capaz de depurar e resolver problemas com: ● tranquilidade ● efetividade ● produtividade ● clareza ● assertividade
  5. 5. Depuração - domínio de ferramentas Para executar bem qualquer trabalho é fundamental dominar ferramentas que auxiliam na execução do mesmo. A habilidade de criar e usar ferramentas foi e ainda é fundamental para espécie humana.
  6. 6. Quais ferramentas vocês usam para depurar aplicações PHP?
  7. 7. Ferramentas de depuração - Não existe bala de prata Diferentes problemas demandam ferramentas diferentes. É fundamental conhecer diversas ferramentas, entender quando usar e como usar.
  8. 8. Bê-a-bá da depuração de aplicações PHP <?php echo 'Hello world!';
  9. 9. Bê-a-bá da depuração de aplicações PHP <?php $vetor = array( 'frutas' => array( 'banana', 'maça', 'laranja' ), 'vegetais' => array( 'alface', 'rúcula', 'couve' ), ); echo $vetor;
  10. 10. Bê-a-bá da depuração de aplicações PHP <?php $vetor = array( 'frutas' => array( 'banana', 'maça', 'laranja' ), 'vegetais' => array( 'alface', 'rúcula', 'couve' ), ); print_r($vetor);
  11. 11. Bê-a-bá da depuração de aplicações PHP <?php $vetor = array( 'frutas' => array( 'banana', 'maça', 'laranja' ), 'vegetais' => array( 'alface', 'rúcula', 'couve' ), ); echo '<pre>'; print_r($vetor);
  12. 12. Bê-a-bá da depuração de aplicações PHP <?php $vetor = array( '', NULL, 'laranja', 123, '123', 1.0, '1.0', ); echo '<pre>'; print_r($vetor);
  13. 13. Bê-a-bá da depuração de aplicações PHP <?php $vetor = array( '', NULL, 'laranja', 123, '123', 1.0, '1.0', ); echo '<pre>'; var_dump($vetor);
  14. 14. Bê-a-bá da depuração de aplicações PHP <?php $vetor = array( // elementos ); ob_start(); echo '<pre>'; var_dump($vetor); $info = ob_get_clean(); file_put_contents('/tmp/debug.html', $info); echo 'Oi ;)';
  15. 15. Problemas comuns da abordagem "imprimir na tela" ● Esforço repetitivo ● Não exibe todo o contexto de variáveis ● Dificulta o entendimento de estruturas de dados complexas ● Requer a quebra de funcionalidade para testes em produção ○ Você pode se dar a esse luxo? O que os usuários vão pensar? ● Desperdiça-se muito tempo tentando identificar fluxos complexos imprimindo valores seguido da função exit() ou die(). ● De vez em quando algum desses echo/print_r/var_dump são esquecidos, acarretando na quebra de funcionalidades ou do layout. ● Identificação de problemas de performance é extremamente onerosa
  16. 16. Ensino fundamental da depuração de aplicações PHP Ajustar php.ini para exibir qualquer tipo de erro: error_reporting = E_ALL display_errors = On # Desligar em PROD. Verificar logs do servidor web enquanto as requisições estão ocorrendo (stream): sudo tail -f /var/log/apache2/error.log [outro/file]
  17. 17. Tipos de depuração Debugging Conecta-se ao software e controla o fluxo de execução da aplicação e obtém seu estado. Tracing Imprime informações em momentos chaves, tais como a pilha de execução da aplicação. Profiling Coleta e mensura diversos dados estatísticos da aplicação, tais como tempo de execução, memória utilizada, quantidades de chamadas, etc.
  18. 18. Xdebug A mais poderosa ferramenta de depuração PHP. Principais funcionalidades: ● Debugging ● Tracing ● Profiling ● Proteção contra loop infinito ● Deixa o var_dump bonito
  19. 19. Xdebug - Instalação No Linux: sudo apt-get install php5-xdebug No Mac (usando brew): sudo brew install php56-xdebug
  20. 20. Xdebug - Tracing
  21. 21. Xdebug - "embeleza" o var_dump
  22. 22. Xdebug - Configurando depuração remota No servidor web - xdebug.ini: xdebug.remote_connect_back=1 xdebug.remote_enable=1 Túnel SSH (necessário somente para aplicações remotas) ssh -R 9000:localhost:9000 thiago@site.com
  23. 23. Xdebug - Configurando depuração remota no PHPStorm 1) Abra a janela Preferences e navegue até PHP > Servers. 2) Preencha o Name, Host e Porta do servidor PHP. 3) Se for um servidor remoto, habilite "Use path mappings" e mapeie a raiz do projeto local com o caminho absoluto do projeto no servidor remoto. 4) Clique em OK para salvar e fechar a janela.
  24. 24. Xdebug - Configurando depuração remota no PHPStorm 1) Vá até o menu Run e clique em Edit Configurations. 2) Clique no botão + e depois em PHP Web Application. 3) Preencha o campo Name; no campo Server selecione o servidor criado no slide anterior e coloque / em Start URL. 4) Clique em OK para salvar e fechar a janela.
  25. 25. Xdebug - Iniciando a depuração no PHPStorm Se a depuração for remota, criar o túnel SSH antes. 1) Vá até o menu Run e clique em Debug 'nome'. 2) Será aberto uma janela do navegador.
  26. 26. Xdebug - Tela de depuração no PHPStorm
  27. 27. Xdebug - Depuração no PHPStorm clique na imagem p/abrir o vídeo no YouTube
  28. 28. Xdebug - Configurando profiling xdebug.ini xdebug.profiler_enable_trigger=1 xdebug.profiler_enable=1 xdebug.profiler_output_dir="/var/www/phpsp" Visite o site, note que ele criará alguns arquivos cachegrind.out na pasta especificada. No PHPStorm: Acesse Tools > Analyze Xdebug Profiler Snapshot e selecione algum arquivo cachegrind.out.
  29. 29. Xdebug - Analisando profiling no PHPStorm clique na imagem p/abrir o vídeo no YouTube
  30. 30. Xdebug - Analisando profiling no KCachegrind
  31. 31. XHProf Ferramenta para profiling.
  32. 32. XHProf - Gráfico de chamadas
  33. 33. Drupal 8 - Webprofiler
  34. 34. Blackfire - outra ferramenta de profiling
  35. 35. Conclusão ● Precisa checar uma estrutura de dados básica? var_dump ● Precisa investigar o fluxo de execução? Xdebug ● Precisa investigar uma estrutura de dados complexa? Xdebug ● Precisa melhorar a performance de uma página? Utilize uma ferramenta de profiling antes de sair atirando para todo lado. Invista seu tempo em ferramentas de depuração para ganhar produtividade.
  36. 36. Contato xthiago@gmail.com xthiago.com + PHP dia 20/agosto em Campinas: phpspima.com.br

×