Depurando Aplicaes PHP
com Xdebug e FirePHP
Jefferson Girohttp://[email protected]
Murphy, o culpado de tudo.
Coronel John Paul Stapp
As Leis
Primeira lei - Se uma coisa pode sair errado, sair.
Se tudo parece estar indo bem, porque voc no olhou direito.
A natureza sempre est a favor da falha oculta.
" de conhecimento geral entre os analistas de software que nunca se elimina o ltimo bug de um programa. Os bugs so aceitos como uma triste realidade. Esperamos elimin-los todos, um por um, mas nunca conseguiremos nos livrar deles." DeMarco, Tom , Editora Campus, 91
Os Erros
Erros nem sempre so bvios;
Erros diferentes podem ter a mesma manifestao;
Saber que um programa no esta correto no necessariamente saber como corrigir o erro.
Bug?
Almirante Grace Hopper
O que fazer? Depurar, testar!!
Depois eu escrevo o plano de testes...
Vamos deixar os testes para a prxima fase...
Na minha mquina funcionou...
Temos que entregar o produto na semana que vem...
O que entendemos por depurao?
Resoluo de problemas (bugs):
Erros Sintticos / de Interpretao
Erros Semnticos
Erros Lgicos
Avisos e Notificaes
Problemas de Desempenho
Erros Sintticos
Erro sinttico acontece quando voc se expressa de uma forma no vlida para o compilador/interpretador.
Quando voc no segue a sintaxe da linguagem.
Prof. Girafales aps cometer um erro sinttico:"Eu jamais me engano. S me enganei uma vez: quando acreditei estar enganado!"
Exemplo de Erro Sinttico
um erro fatal!!!
Bizu
Ateno no destaque de sintaxe da IDE e olhe sempre as linhas anteriores indicada pela mensagem de erro do PHP.
Cad os Erros?
No php.ini:display_errors = On error_reporting = E_ALL
Erros Semnticos
Erros de semntica envolvem cdigos tcnicamente corretos que contm problemas com o significado do cdigo.
Pica-pau sobre os erros semnticos"Yo no lo conoo seor"
Exemplo de Erro Semntico
um erro fatal!!!
Bizu
Bizu: verifique se as incluses foram feitas corretamente e desconfie quando o recurso de autocomplete da IDE no funcionar
Avisos e Notificaes
Avisos/Notificaes podem ser tratados pelo PHP, mas provavelmente no sobre algo que voc no gostaria no seu cdigo
Dirty Harry avisando com sua magnum:"Do you feel lucky, punk?"
Exemplo de Aviso/Notificao
Bizu
Configure o PHP para exibir tudo no php.ini:error_reporting = E_ALL;
Erros Lgicos
Simplesmente seu programa no faz o que deveria fazer.
Chapolim se deparando com um erro lgico:"Pepe, j tirei a vela."
Como vamos resolver?
Ferramentas
Mensagens de erro do PHP
Recursos do Eclipse PDT
Instrues de impresso
Xdebug
Firebug + FirePHP
O que o XDebug?
No um sanduche
uma extenso para PHP
Multiplataforma
Atualmente na verso 2
Criada pelo Derick Rethans (Colaborador chave do PHP)
Com a finalidade de prover informaes para depurao
e otimizao de aplicaes
www.xdebug.org
Principais recursos do XDebug
Melhorias nas mensagens de erro do PHP
Melhorias na sada do var_dump()
Proteo contra recurses infinitas
Depurao remota (Debugging)
Acompanhamento do fluxo da aplicao (Tracing)
Informaes sobre consumo de recursos (Profilling)
Cobertura de cdigo (Code Coverage)
Instalao do XDebug
Atravs do cdigo fonte
Atravs de binrios
Atravs do repositrio PECL
Instalao do XDebug
Configurao do PHP.INI
No Windows:
zend_extension_ts="C:\Diretorio\de\extensoes\do\PHP\php_xdebug.dll"
No Linux:
zend_extension="/diretorio/de/extensoes/do/PHP/xdebug.so"
Verificando a Instalao atravs do phpinfo();
Configuraes comuns
No php.ini
xdebug.show_local_vars=On
Exibe variveis locais
xdebug.dump.GET=*
Mostra o contedo da superglobal GET
(funciona para GET, POST, SERVER, COOKIE, ...)
xdebug.max_nesting_level=4
Define limite de recurso
Debugging
No php.ini
; debug remoto
xdebug.remote_enable=On
xdebug.remote_host="localhost"
xdebug.remote_port=9000
xdebug.remote_handler="dbgp"
No Eclipse PDT
run->open debug dialog...->PHP Web Page->New
Defina o Server Debugger para Xdebug
Escolha um arquivo por onde iniciar o debug
Verifique se a URL autogerada est correta
Apply->Debug
Tracing
Comando1X > 3Comando4 - Erro
Comando2Comando3
V
F
Tracing
No php.ini
xdebug.auto_trace=On
xdebug.trace_output_dir=D:\Temp
Fazendo tracing de uma parte especfica do cdigo
Profilling
No php.ini
xdebug.profiler_output_dir="D:\Temp"
xdebug.profiler_append=On
xdebug.profiler_enable_trigger=On
O KCacheGrind
FirePHP
um plugin para um plugin (d) do Firefox chamado Firebug
Permite que Scripts PHP converse com o painel do Firebug
Todos os dados so enviados via response headers sem
interferir no contedo da pgina
Ideal para depurao de aplicaes AJAX onde respostas JSON
e XML simples so necessrias
FirePHP
Instalao
O FireBug
O FirePHP
As Bibliotecas
API Procedural
API Orientada a Objeto
www.firephp.org
Referncias
Instalao
http://www.xdebug.org/docs/
http://www.firephp.org/HQ/Use.html
http://devzone.zend.com/article/2803-Introducing-xdebug
http://www.onlamp.com/public/php/2004/08/12/DebuggingPHP.htm
http://mikebernat.com/blog/My_PHP_Best_Pratices
Obrigado! Dvidas?
Top Related