Depurando aplicações PHP like a BOSS
Thiago Rodrigues
Eng. de Software Sr.
CI&T - PHPSP
Thiago Rodrigues
Bacharel em Sistemas de Informação pela
Universidade do Estado de Minas Gerais (UEMG);
Engenheiro de Soft...
Depuração - O que é?
Definição formal:
Depuração (em inglês: debugging, debug) é o processo de encontrar e
reduzir defeito...
Depuração - Habilidade necessária
O bom desenvolvedor é capaz de depurar e resolver
problemas com:
● tranquilidade
● efeti...
Depuração - domínio de ferramentas
Para executar bem qualquer
trabalho é fundamental dominar
ferramentas que auxiliam na
e...
Quais ferramentas vocês usam para depurar
aplicações PHP?
Ferramentas de depuração - Não existe bala de prata
Diferentes problemas demandam ferramentas
diferentes.
É fundamental co...
Bê-a-bá da depuração de aplicações PHP
<?php echo 'Hello world!';
Bê-a-bá da depuração de aplicações PHP
<?php
$vetor = array(
'frutas' => array(
'banana', 'maça', 'laranja'
),
'vegetais' ...
Bê-a-bá da depuração de aplicações PHP
<?php
$vetor = array(
'frutas' => array(
'banana', 'maça', 'laranja'
),
'vegetais' ...
Bê-a-bá da depuração de aplicações PHP
<?php
$vetor = array(
'frutas' => array(
'banana', 'maça', 'laranja'
),
'vegetais' ...
Bê-a-bá da depuração de aplicações PHP
<?php
$vetor = array(
'',
NULL,
'laranja',
123,
'123',
1.0,
'1.0',
);
echo '<pre>';...
Bê-a-bá da depuração de aplicações PHP
<?php
$vetor = array(
'',
NULL,
'laranja',
123,
'123',
1.0,
'1.0',
);
echo '<pre>';...
Bê-a-bá da depuração de aplicações PHP
<?php
$vetor = array(
// elementos
);
ob_start();
echo '<pre>';
var_dump($vetor);
$...
Problemas comuns da abordagem "imprimir na tela"
● Esforço repetitivo
● Não exibe todo o contexto de variáveis
● Dificulta...
Ensino fundamental da depuração de aplicações PHP
Ajustar php.ini para exibir qualquer tipo de erro:
error_reporting = E_A...
Tipos de depuração
Debugging
Conecta-se ao software e controla o fluxo de execução da
aplicação e obtém seu estado.
Tracin...
Xdebug
A mais poderosa ferramenta de depuração PHP.
Principais funcionalidades:
● Debugging
● Tracing
● Profiling
● Proteç...
Xdebug - Instalação
No Linux:
sudo apt-get install php5-xdebug
No Mac (usando brew):
sudo brew install php56-xdebug
Xdebug - Tracing
Xdebug - "embeleza" o var_dump
Xdebug - Configurando depuração remota
No servidor web - xdebug.ini:
xdebug.remote_connect_back=1
xdebug.remote_enable=1
T...
Xdebug - Configurando depuração remota no PHPStorm
1) Abra a janela Preferences e navegue até PHP > Servers.
2) Preencha o...
Xdebug - Configurando depuração remota no PHPStorm
1) Vá até o menu Run e clique em Edit Configurations.
2) Clique no botã...
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 cliq...
Xdebug - Tela de depuração no PHPStorm
Xdebug - Depuração no PHPStorm
clique na imagem p/abrir o
vídeo no YouTube
Xdebug - Configurando profiling
xdebug.ini
xdebug.profiler_enable_trigger=1
xdebug.profiler_enable=1
xdebug.profiler_outpu...
Xdebug - Analisando profiling no PHPStorm
clique na imagem p/abrir o
vídeo no YouTube
Xdebug - Analisando profiling no KCachegrind
XHProf
Ferramenta para profiling.
XHProf - Gráfico de chamadas
Drupal 8 - Webprofiler
Blackfire - outra ferramenta de profiling
Conclusão
● Precisa checar uma estrutura de dados básica? var_dump
● Precisa investigar o fluxo de execução? Xdebug
● Prec...
Contato
xthiago@gmail.com
xthiago.com
+ PHP dia 20/agosto em Campinas:
phpspima.com.br
Próximos SlideShares
Carregando em…5
×

Depurando aplicações PHP like a BOSS

518 visualizações

Publicada em

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.

Publicada em: Software
0 comentários
5 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
518
No SlideShare
0
A partir de incorporações
0
Número de incorporações
11
Ações
Compartilhamentos
0
Downloads
3
Comentários
0
Gostaram
5
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • Me apresentar
  • (((Para quebrar um pouco o gelo))) Antes de começar a falar sobre o tema gostaria de fazer uma pesquisa aqui. 1) Quem aqui já escutou essa frase no trabalho? 2) Agora sejam sinceros, quem aqui já falou essa frase? (Se quase ninguém falar, dizer: mentirosos! haha)
  • Afinal, o que é "ambiente de desenvolvimento"? Como o nome sugere, trata-se de todo o ecosistema onde desenvolvemos nossa aplicação. Tal ecosistema possui toda pilha de software necessária para rodar a aplicação que estamos desenvolvendo e geralmente fica no computador do desenvolvedor e é semelhante ao ambiente de produção, isto é, o ambiente que o usuário final usa. Além disso, geralmente instalamos ferramentas que nos auxiliam no desenvolvimento, tal como depurador, scripts que automatizam tarefas, etc.
  • Eis aqui um exemplo da pilha de software requerida para ter o Drupal 8 rodando em um ambiente. (Comentar rapidamente sobre cada um dos pontos). Ao final, ressaltar: construir um ambiente de desenvolvimento não é simples, tampouco trivial.
  • Problema muito comum de muitos projetos. O que tem que ser instalado? Qual versão? Qual a configuração é necessária? Será que vão lembrar 1 ano depois? E quando entrar um desenvolvedor novo? Comentar sobre quando entrei na Templum (n vou citar nome) - a cada semana, enquanto desenvolvia, me deparava com problemas que só depois descobria que faltava a instalação de um determinado módulo, a criação de um link simbólico e coisas do tipo.
  • Como agir quando precisamos atualizar a versão do PHP e precisamos que todos os desenvolvedores o façam? Vamos pedir um a um? Será que todos farão? Sempre vai ter um cara que vai deixar para depois e esquecer de fazer, e como a lei de murphy prega, provavelmente vai impactar no futuro em algum bug. Além disso, como os demais membros do time podem contribuir? É fundamental que todos os membros do time conheçam toda a pilha de tecnologia.
  • Quanto tempo o desenvolvedor vai levar para preparar o ambiente? É muito comum desenvolvedores ficarem construindo o ambiente por 1 ou 2 dias, assim como a necessidade da ajuda de outros membros do time. Construir o ambiente sem dúvida é um processo penoso.
  • Ferramentas como o XAMMP são terríveis porque no geral são muito distoantes do ambiente onde a aplicação roda.
  • A Virtualização do ambiente de desenvolvimento permite mitigar todos os problemas expostos anteriormente. Ela permite (explicar os pontos).
  • Explicar a diferença arquitetural entre ambas de forma sucinta.
  • TODO: colocar esse Vagrantfile e o bootstrap.sh em um gist
  • TODO: colocar esse Vagrantfile e o bootstrap.sh em um gist
  • TODO: colocar esse Vagrantfile e o bootstrap.sh em um gist
  • TODO: colocar esse Vagrantfile e o bootstrap.sh em um gist
  • 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

    ×