Debugando em PHP com Wamp e NetBeans

junho 16th, 2009 por Ricardo Martins Deixe um comentário »

Hoje vou falar um pouco sobre debug no php. Um recurso pouco explorado pela maioria dos programadores php que conheço, e até por mim mesmo que apesar de ter mais de 5 anos de experiência com a linguagem, só agora resolvi fazer um debug de verdade funcionar.

Debugar códigos na maioria das linguagens de programação, permite que você navegue por dentro do código e suas funções na medida que o programa ou página é executada, podendo acompanhar o valor de variáveis e inclusive alterá-las, o que ajuda em 90% o desenvolvedor a encontrar falhas ou pontos específicos em uma aplicação.

Então vamos ao que interessa…

Para ser rápido, presumimos que você tenha instalado em seu ambiente windows o pacote Wamp e o NetBeans 6.5.x, ambos com suas configurações originais.

- Fazer download do Wamp Server.
- Fazer download do NetBeans 6.5.1  para PHP.

Verifique se seu Wamp está instalado corretamente executando-o e acessando o site http://localhost/ no seu navegador. Se aparecer a página do Wamp é porque tudo ocorreu direitinho.

Adicionando exceção ao firewall do windows1. A primeira coisa que vamos fazer é ir até o Firewall do windows, no Painel de Controle e adicionar a porta TCP 9000 como exceção, para evitar problemas com o debug no netbeans.

2. Na seqüência, abra seu NetBeans e vá ao menu Ferramentas -> Opções (Tools -> Options) e clique no ícone do PHP. Em seguida verifique se a porta de depuração é a 9000, e altere caso não seja. Clique em OK.

3. Você precisará de uma extensão de debug do php. No meu caso, utilizei o XDebug. Veja a versão do seu PHP na sua pagina inicial do Wamp Server (http://localhost/) e faça o download da .DLL na versão apropriada:

- Faça download do XDebug para versão do PHP 5.2.
- Disponível também para versão 5.3 aqui.
- Consulte outras versões.

4. Coloque o arquivo DLL que acabou de baixar na pasta EXT do PHP. Se você instalou o wamp de forma padrão esta pasta será “C:\wamp\bin\php\php5.2.5\ext” ou algo parecido dependendo da versão instalada.

5. Feito isso, inicie o Wamp Server (caso ele não esteja iniciado), clique no ícone dele ao lado do relógio e procure pelo arquivo php.ini. (Menu: PHP->php.ini).

6. O arquivo abrirá no bloco de notas. Vá até o final do arquivo e adicione as linhas abaixo:

[XDebug]
; Only Zend OR (!) XDebug
zend_extension_ts = “C:\wamp\bin\php\php5.2.5\ext\php_xdebug-2.0.4-5.2.8.dll
; XAMPP and XAMPP Lite 1.7.0 and later come with a bundled xdebug at <XAMPP_HOME>/php/ext/php_xdebug.dll, without a version number.
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
; Port number must match debugger port number in NetBeans IDE Tools > Options > PHP
xdebug.remote_handler=dbgp
xdebug.profiler_enable=1
xdebug.profiler_output_dir=”c:\wamp\xdebug”

Altere o caminho da dll se necessário, colocando o caminho exato da pasta e do arquivo que você acabou de fazer download no passo anterior. Ele pode variar dependendo da versão conforme falei.

7. Salve o arquivo e reinicie todos os serviços do wamp na opção “Reiniciar todos os serviços” que aparece no menu do relógio.

8. Para confirmar a instalação, acesse o link do phpinfo() que aparece na página inicial do seu wamp (http://localhost/?phpinfo=1).

9. Se tudo correu bem, o final do primeiro trecho do phpinfo deverá ser parecido com este:
phpinfo com xdebug instalado

Dica:  se você já tinha uma instalação anterior, certifique-se de que não há componentes de debug do zend instalados e configurados no php.ini. Os dois não se entendem muito bem.

Finalmente debugando no NetBeans

Se você chegou até aqui, parabéns. O mais difícil já foi (eu acho). Agora debugar fica mais fácil.

Abra seu NetBeans e crie um arquivo PHP qualquer ou abra um projeto existente. Diferente de outros meios de debug,marcando o breakpoint no netbeans nada precisará ser alterado no código.

Vá até a linha que deseja que o debug comece a ser executado e pressione Ctrl + F8 ou clique no número da linha ao lado esquerdo do código. (Veja ao lado)

Em seguida, mande depurar o arquivo apertando Ctrl + Shift + F5 ou indo ao menu “Depurar -> Depurar arquivo.php”.

Na janela que se abrirá marque a opção PHP do lado do servidor.

breakpoint no netbeansUma nova janela do navegador se abrirá e a execução irá parar no ponto de interrupção que determinamos com uma setinha verde apontando a linha do código que está sendo executada.  Você pode alterar o valor das variáveis em tempo de execução, ou criar observadores (watchers) para elas.

Para continuar a execução basta apertar F5 ou o botão continue-debugging-session no próprio NetBeans.

Isso tudo que falei é apenas o básico do processo de debug que o netbeans permite fazer. Existem outros métodos como utilizando o plugin FirePhp para o Firefox, mas não falarei disso desta vez.

Espero que esta seja uma boa alternativa pra você no lugar dos velhos ‘echos’ perdidos no seu código fonte. ;)

Para ver e aprender mais sobre o assunto, veja a matéria sobre debugging na página especial da netbeans (em inglês). Tem um passo-a-passo do processo de debug bem bacana.

Update (09-dez-2009): as versões que sugeri para download são para PHP’s compilados com VC6. Veja qual a forma de compilação do seu php no phpinfo(), no item ‘Compiler’. Ex: MSVC6 (Visual C++ 6.0) corresponde ao VC6 do Xdebug. Baixe a versão adequada ao seu PHP, não esquecendo de substituir o nome da DLL no php.ini confome mostrado acima.

17 comments

  1. Tylër disse:

    logs de erro do apache:

    [Tue Aug 10 11:13:44 2010] [notice] Parent: Created child process 584
    Xdebug requires Zend Engine API version 220070929.
    The Zend Engine API version 220090626 which is installed, is newer.
    Contact Derick Rethans at http://xdebug.org for a later version of Xdebug.

    [Tue Aug 10 11:13:45 2010] [notice] Child 584: Child process is running

Deixe uma resposta

Digite o código de segurança ao lado: