Post on 15-Apr-2017
Depurando aplicações PHP like a BOSS
Thiago RodriguesEng. de Software Sr.CI&T - PHPSP
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
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
Depuração - Habilidade necessária
O bom desenvolvedor é capaz de depurar e resolver problemas com:
● tranquilidade
● efetividade
● produtividade
● clareza
● assertividade
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.
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 conhecer diversas ferramentas, entender quando usar e como usar.
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' => array(
'alface', 'rúcula', 'couve'),
);
echo $vetor;
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);
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);
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);
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);
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 ;)';
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
Ensino fundamental da depuração de aplicações PHP
Ajustar php.ini para exibir qualquer tipo de erro:
error_reporting = E_ALLdisplay_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]
Tipos de depuração
DebuggingConecta-se ao software e controla o fluxo de execução da aplicação e obtém seu estado.
TracingImprime informações em momentos chaves, tais como a pilha de execução da aplicação.
ProfilingColeta e mensura diversos dados estatísticos da aplicação, tais como tempo de execução, memória utilizada, quantidades de chamadas, etc.
Xdebug
A mais poderosa ferramenta de depuração PHP.
Principais funcionalidades:
● Debugging
● Tracing
● Profiling
● Proteção contra loop infinito
● Deixa o var_dump bonito
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=1xdebug.remote_enable=1
Túnel SSH (necessário somente para aplicações remotas)ssh -R 9000:localhost:9000 thiago@site.com
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.
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.
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.
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=1xdebug.profiler_enable=1xdebug.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.
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
● 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.
Contato
xthiago@gmail.comxthiago.com
+ PHP dia 20/agosto em Campinas:
phpspima.com.br