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.

TDC2016SP - Depurando Aplicações PHP Like a BOSS

91 visualizações

Publicada em

Depurando Aplicações PHP Like a BOSS

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

  • Seja a primeira pessoa a gostar disto

TDC2016SP - 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 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 depurare 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 conhecerdiversas ferramentas, entender quando usare 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
  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
  30. 30. Xdebug - Analisando profiling no KCachegrind
  31. 31. XHProf Ferramenta para profiling.
  32. 32. XHProf - Gráfico de chamadas
  33. 33. Webprofiler do framework
  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

×