36
Depurando aplicações PHP like a BOSS Thiago Rodrigues Eng. de Software Sr. CI&T - PHPSP

Depurando aplicações PHP like a BOSS

Embed Size (px)

Citation preview

Page 1: Depurando aplicações PHP like a BOSS

Depurando aplicações PHP like a BOSS

Thiago RodriguesEng. de Software Sr.CI&T - PHPSP

Page 2: Depurando aplicações PHP like a BOSS

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

Page 3: Depurando aplicações PHP like a BOSS

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

Page 4: Depurando aplicações PHP like a BOSS

Depuração - Habilidade necessária

O bom desenvolvedor é capaz de depurar e resolver problemas com:

● tranquilidade

● efetividade

● produtividade

● clareza

● assertividade

Page 5: Depurando aplicações PHP like a BOSS

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.

Page 6: Depurando aplicações PHP like a BOSS

Quais ferramentas vocês usam para depurar aplicações PHP?

Page 7: Depurando aplicações PHP like a BOSS

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.

Page 8: Depurando aplicações PHP like a BOSS

Bê-a-bá da depuração de aplicações PHP

<?php echo 'Hello world!';

Page 9: Depurando aplicações PHP like a BOSS

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;

Page 10: Depurando aplicações PHP like a BOSS

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);

Page 11: Depurando aplicações PHP like a BOSS

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);

Page 12: Depurando aplicações PHP like a BOSS

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);

Page 13: Depurando aplicações PHP like a BOSS

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);

Page 14: Depurando aplicações PHP like a BOSS

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 ;)';

Page 15: Depurando aplicações PHP like a BOSS

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

Page 16: Depurando aplicações PHP like a BOSS

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]

Page 17: Depurando aplicações PHP like a BOSS

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.

Page 18: Depurando aplicações PHP like a BOSS

Xdebug

A mais poderosa ferramenta de depuração PHP.

Principais funcionalidades:

● Debugging

● Tracing

● Profiling

● Proteção contra loop infinito

● Deixa o var_dump bonito

Page 19: Depurando aplicações PHP like a BOSS

Xdebug - Instalação

No Linux:

sudo apt-get install php5-xdebug

No Mac (usando brew):

sudo brew install php56-xdebug

Page 20: Depurando aplicações PHP like a BOSS

Xdebug - Tracing

Page 21: Depurando aplicações PHP like a BOSS

Xdebug - "embeleza" o var_dump

Page 22: Depurando aplicações PHP like a BOSS

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 [email protected]

Page 23: Depurando aplicações PHP like a BOSS

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.

Page 24: Depurando aplicações PHP like a BOSS

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.

Page 25: Depurando aplicações PHP like a BOSS

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.

Page 26: Depurando aplicações PHP like a BOSS

Xdebug - Tela de depuração no PHPStorm

Page 27: Depurando aplicações PHP like a BOSS

Xdebug - Depuração no PHPStorm

clique na imagem p/abrir o vídeo no YouTube

Page 28: Depurando aplicações PHP like a BOSS

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.

Page 29: Depurando aplicações PHP like a BOSS

Xdebug - Analisando profiling no PHPStorm

clique na imagem p/abrir o vídeo no YouTube

Page 30: Depurando aplicações PHP like a BOSS

Xdebug - Analisando profiling no KCachegrind

Page 31: Depurando aplicações PHP like a BOSS

XHProf

Ferramenta para profiling.

Page 32: Depurando aplicações PHP like a BOSS

XHProf - Gráfico de chamadas

Page 33: Depurando aplicações PHP like a BOSS

Drupal 8 - Webprofiler

Page 34: Depurando aplicações PHP like a BOSS

Blackfire - outra ferramenta de profiling

Page 35: Depurando aplicações PHP like a BOSS

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.