Depurando aplicações PHP like a BOSS

Preview:

Citation preview

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