Depurando   Aplicações   PHP com   Xdebug   e   FirePHP Jefferson Girão http://jefferson.eti.br [email_address]
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ê não 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 são 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 são óbvios; Erros diferentes podem ter a mesma manifestação; Saber que um programa não esta correto não 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 próxima fase...” “ Na minha máquina funcionou...” “ Temos que entregar o produto na semana que vem...”
O que entendemos por depuração? Resolução de problemas (“bugs”): Erros Sintáticos / de Interpretação Erros Semânticos Erros Lógicos Avisos e Notificações Problemas de Desempenho
Erros Sintáticos Erro sintático acontece quando você se expressa de uma forma não válida para o compilador/interpretador.  Quando você não segue a sintaxe da linguagem.  Prof. Girafales após cometer um erro sintático: "Eu jamais me engano.  Só me enganei uma vez:  quando acreditei estar enganado!"
Exemplo de Erro Sintático É um erro fatal!!! Bizu Atenção 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 Semânticos Erros de semântica envolvem códigos técnicamente corretos que contêm problemas com o significado do código. Pica-pau sobre os erros semânticos "Yo no lo conoço señor "
Exemplo de Erro Semântico É um erro fatal!!! Bizu Bizu: verifique se as inclusões  foram feitas corretamente e  desconfie quando o recurso de  autocomplete da IDE não funcionar
Avisos e Notificações Avisos/Notificações podem ser tratados pelo PHP, mas provavelmente não é sobre algo que você não gostaria no seu código Dirty Harry avisando com sua magnum: "Do you feel lucky, punk? "
Exemplo de Aviso/Notificação Bizu Configure o PHP para exibir tudo no php.ini: error_reporting = E_ALL;
Erros Lógicos Simplesmente seu programa não faz o que deveria fazer. Chapolim se deparando com um erro lógico: "Pepe, já tirei a vela. "
Como vamos resolver? Ferramentas Mensagens de erro do PHP Recursos do Eclipse PDT Instruções de impressão Xdebug Firebug + FirePHP
O que é o XDebug? Não é um sanduíche É uma extensão para PHP Multiplataforma Atualmente na versão 2 Criada pelo Derick Rethans (Colaborador chave do PHP) Com a finalidade de prover informações para depuração  e otimização de aplicações www.xdebug.org
Principais recursos do XDebug Melhorias nas mensagens de erro do PHP Melhorias na saída do var_dump() Proteção contra recursões infinitas Depuração remota (Debugging) Acompanhamento do fluxo da aplicação (Tracing) Informações sobre consumo de recursos (Profilling) Cobertura de código (Code Coverage)
Instalação do XDebug Através do código fonte Através de binários Através do repositório PECL
Instalação do XDebug Configuração 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 Instalação através do phpinfo();
Configurações comuns No php.ini xdebug.show_local_vars=On  Exibe variáveis locais xdebug.dump.GET=*  Mostra o conteúdo da superglobal GET  (funciona para GET, POST, SERVER, COOKIE, ...) xdebug.max_nesting_level=4  Define limite de recursão
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 V F Comando1 X > 3 Comando4 - Erro Comando2 Comando3
Tracing No php.ini xdebug.auto_trace=On xdebug.trace_output_dir=D:\Temp Fazendo tracing de uma parte específica do código
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 são enviados via response headers sem  interferir no conteúdo da página Ideal para depuração de aplicações AJAX onde respostas JSON e XML simples são necessárias
FirePHP Instalação O FireBug O FirePHP As Bibliotecas API Procedural API Orientada a Objeto www.firephp.org
Referências Instalação 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! Dúvidas?

Depurando Aplicacoes PHP com XDebug e FirePHP II

  • 1.
    Depurando Aplicações PHP com Xdebug e FirePHP Jefferson Girão http://jefferson.eti.br [email_address]
  • 2.
    Murphy, o culpadode tudo. Coronel John Paul Stapp
  • 3.
    As Leis Primeiralei - Se uma coisa pode sair errado, sairá. Se tudo parece estar indo bem, é porque você não 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 são aceitos como uma triste realidade. Esperamos eliminá-los todos, um por um, mas nunca conseguiremos nos livrar deles." DeMarco, Tom , Editora Campus, 91
  • 4.
    Os Erros Erros nem sempre são óbvios; Erros diferentes podem ter a mesma manifestação; Saber que um programa não esta correto não necessariamente é saber como corrigir o erro.
  • 5.
  • 6.
    O que fazer?Depurar, testar!! “ Depois eu escrevo o plano de testes...” “ Vamos deixar os testes para a próxima fase...” “ Na minha máquina funcionou...” “ Temos que entregar o produto na semana que vem...”
  • 7.
    O que entendemospor depuração? Resolução de problemas (“bugs”): Erros Sintáticos / de Interpretação Erros Semânticos Erros Lógicos Avisos e Notificações Problemas de Desempenho
  • 8.
    Erros Sintáticos Errosintático acontece quando você se expressa de uma forma não válida para o compilador/interpretador. Quando você não segue a sintaxe da linguagem. Prof. Girafales após cometer um erro sintático: "Eu jamais me engano. Só me enganei uma vez: quando acreditei estar enganado!"
  • 9.
    Exemplo de ErroSintático É um erro fatal!!! Bizu Atenção no destaque de sintaxe da IDE e olhe sempre as linhas anteriores à indicada pela mensagem de erro do PHP.
  • 10.
    Cadê os Erros?No php.ini: display_errors = On error_reporting = E_ALL
  • 11.
    Erros Semânticos Errosde semântica envolvem códigos técnicamente corretos que contêm problemas com o significado do código. Pica-pau sobre os erros semânticos "Yo no lo conoço señor "
  • 12.
    Exemplo de ErroSemântico É um erro fatal!!! Bizu Bizu: verifique se as inclusões foram feitas corretamente e desconfie quando o recurso de autocomplete da IDE não funcionar
  • 13.
    Avisos e NotificaçõesAvisos/Notificações podem ser tratados pelo PHP, mas provavelmente não é sobre algo que você não gostaria no seu código Dirty Harry avisando com sua magnum: "Do you feel lucky, punk? "
  • 14.
    Exemplo de Aviso/NotificaçãoBizu Configure o PHP para exibir tudo no php.ini: error_reporting = E_ALL;
  • 15.
    Erros Lógicos Simplesmenteseu programa não faz o que deveria fazer. Chapolim se deparando com um erro lógico: "Pepe, já tirei a vela. "
  • 16.
    Como vamos resolver?Ferramentas Mensagens de erro do PHP Recursos do Eclipse PDT Instruções de impressão Xdebug Firebug + FirePHP
  • 17.
    O que éo XDebug? Não é um sanduíche É uma extensão para PHP Multiplataforma Atualmente na versão 2 Criada pelo Derick Rethans (Colaborador chave do PHP) Com a finalidade de prover informações para depuração e otimização de aplicações www.xdebug.org
  • 18.
    Principais recursos doXDebug Melhorias nas mensagens de erro do PHP Melhorias na saída do var_dump() Proteção contra recursões infinitas Depuração remota (Debugging) Acompanhamento do fluxo da aplicação (Tracing) Informações sobre consumo de recursos (Profilling) Cobertura de código (Code Coverage)
  • 19.
    Instalação do XDebugAtravés do código fonte Através de binários Através do repositório PECL
  • 20.
    Instalação do XDebugConfiguração 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 Instalação através do phpinfo();
  • 21.
    Configurações comuns Nophp.ini xdebug.show_local_vars=On Exibe variáveis locais xdebug.dump.GET=* Mostra o conteúdo da superglobal GET (funciona para GET, POST, SERVER, COOKIE, ...) xdebug.max_nesting_level=4 Define limite de recursão
  • 22.
    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
  • 23.
    Tracing V FComando1 X > 3 Comando4 - Erro Comando2 Comando3
  • 24.
    Tracing No php.inixdebug.auto_trace=On xdebug.trace_output_dir=D:\Temp Fazendo tracing de uma parte específica do código
  • 25.
    Profilling No php.inixdebug.profiler_output_dir="D:\Temp" xdebug.profiler_append=On xdebug.profiler_enable_trigger=On O KCacheGrind
  • 26.
    FirePHP É umplugin para um plugin (dã) do Firefox chamado Firebug Permite que Scripts PHP converse com o painel do Firebug Todos os dados são enviados via response headers sem interferir no conteúdo da página Ideal para depuração de aplicações AJAX onde respostas JSON e XML simples são necessárias
  • 27.
    FirePHP Instalação OFireBug O FirePHP As Bibliotecas API Procedural API Orientada a Objeto www.firephp.org
  • 28.
    Referências Instalação 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! Dúvidas?