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.
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. 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. Depuração - Habilidade necessária
O bom desenvolvedor é capaz de depurar e resolver
problemas com:
● tranquilidade
● efetividade
● produtividade
● clareza
● assertividade
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.
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.
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. 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. 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. 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. 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. Xdebug - Instalação
No Linux:
sudo apt-get install php5-xdebug
No Mac (usando brew):
sudo brew install php56-xdebug
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. 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. 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. 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.
27. Xdebug - Depuração no PHPStorm
clique na imagem p/abrir o
vídeo no YouTube
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. Xdebug - Analisando profiling no PHPStorm
clique na imagem p/abrir o
vídeo no YouTube
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.
(((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