Debugando em PHP com Wamp e NetBeans

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.

Update (13-dez-2010): Um artigo legal no iMasters sobre xDebug com wamp.

Compartilhe com os amigos
  • Digg
  • StumbleUpon
  • Print
  • del.icio.us
  • Facebook
  • Twitter
  • Google Bookmarks
  • email
  • Google Buzz
  • LinkedIn
  • Live
  • MSN Reporter
  • Orkut
  • PDF
  • Reddit
  • Tumblr

Comentarios(18)

Rogerioagosto 6th, 2009 at 19:11

Ricardo, muito bom essa dica, é mais compelta que achei na net.
Porém ainda não rolou aqui o xdebug, ele fica “aguardando conexão xdebug” e não sai disso. alguma dica? Valeu e parabéns. Rogerio

Ricardo Martinsagosto 7th, 2009 at 08:56

Olá Rogério.
O NetBeans tem uma configuração default que é ‘parar na primeira linha’, ou seja, quando você começa a debugar, ele pára o cursor de execução na primeira linha do fonte.
Dê uma olhada se quando aparece esta mensagem a setinha verde se encontra na primeira linha do index do seu projeto ou no arquivo que vc está (caso tenha mandado depurar arquivo).

Obrigado pelos comentários. Abraços!

Manuelagosto 15th, 2009 at 19:38

Comigo acontece a mesma coisa. Já revisei toda a configuração e aparece apeanas a mensagem \"Aguardando conexão (netbeans-xdebug)\".
Não aparece nenhuma setinha verde.

Manuelagosto 15th, 2009 at 20:12

Utilizei os pré-requisitos citados em
http://wiki.netbeans.org/HowToConfigureXDebug
e consegui.

manuelagosto 20th, 2009 at 12:15

bastou baixar a versao 529 do php no site do wamp.
Foi necessario devido a compatibilidade com o xdebug!
Esta tudo ok agora!

Ricardo Martinsnovembro 4th, 2009 at 12:55

Outro ponto a ficar atento é com relação as aspas dos paths. Me parece que o wordpress formatou ” por outra coisa. Veja se as aspas duplas dos parametros do XDebug estão ok ou se estão com coisas parecidas.

Flávio Nunesdezembro 4th, 2009 at 14:32

Olá, Ricardo,

Ótimo texto o seu. Só que eu não estou conseguindo fazer funcionar. Quando tento debugar o código, o Netbeans não pára no breakpoint. Você o que pode ser?

Parabéns pelo texto.

Flávio Nunesdezembro 15th, 2009 at 07:20

Bacana o texto. A princípio, tive muitas dificuldades para instalar, mas finalmente funcionou. A versão do xdebug tem que ser compatível com a do php. Além de olhar a versão, o código VC tem que ser igual.

Após instalar tudo, ainda apareceu um erro dizendo:

Exceção de soquete ocorrida: Caso você tenha quaisquer Inspeções, tente removê-las e reinicie o depurador. Se isso não ajudar e você não tiver quaisquer Inspeções, registre o problema e anexe o log do IDE.

Neste caso, verifique se o firewall tem a exceção para a porta do xdebug.

Se o erro ainda persistir, tente Janela->Depurando->Observadores e apague os observadores que estiverem lá.

Bom, espero ter ajudado com comentário.

Tarsisdezembro 29th, 2009 at 11:37

Olá Ricardo, parabéns pelo post!!!
Ja tenho o x-debug instalado e quando tem um erro ele ja exibe na tela do browser.
Mas ao tentar utiliza-lo com o netbeans para depurar estou tendo dificuldades.
Configurei o projeto para exibir apenas na janela do editor o debug.
logo quando executei verifiquei ele nao esta reconhecendo o valor das variaveis $ _SERVER
como o DOCUMENT_ROOT … esta vindo null. gerando assim um erro de include logo no comeco do script.

Preciso fazer alguma configuração para isso?
Só nao esta funcionando no netbeans e ja verifiquei as configuraçoes no php.ini .. ta tudo ok.

se puder ajudar agradeço!!

Ricardo Martinsdezembro 29th, 2009 at 18:19

Oi Tarsis.
Nao consegui entender muito bem o que aconteceu. Se o xdebug já está instalado (conforme mostra o print do phpinfo() acima) tente mudar o numero da porta no netbeans e liberando a nova no firewall do windows. Pode ser que outro programa esteja usando a porta 9000 antes do netbeans/apache.
Qualquer coisa forneça mais detalhes do que está ocorrendo.
Boa sorte! Abraços!

Tarsisdezembro 29th, 2009 at 19:06

Eu fiz um teste usando o script exemplo do site do netbeans.
veja o q esta acontecendo
http://img442.imageshack.us/img442/4337/netbeans.gif
a pagina correspondente é aberta no browser executando o script,
aparece na barra inferior do netbeans como se estivesse carregando o x-debug mas nunca carrega …
como pode ser visto na imagem que mandei.

Ricardo Martinsdezembro 29th, 2009 at 19:57

Oi Tarsis. Isso parece ser coisa de configuração ou má instalação.
- O servidor onde tenta executar é a sua propria maquina? Caso não seja, terá que adicionar um item no php.ini dizendo qual o ip da sua maquina pra ele enviar as respostas pra lá.
Se for a sua maquina, cole o final do primeiro bloco do seu phpinfo(), igual mostramos acima. Veja ainda se a versão do xdebug é a correta para a sua versão de compilação do php (ver final do post).
Ahh, veja se há algum observador na aba correspondente no netbeans, se houver, remova.
Me avise se funcionar.

Tarsisdezembro 29th, 2009 at 20:11

estou usando o php 5.2.5,
tava com o x-debug 2.0.4 mas troquei para o
2.0.2 ( 5.2 Vc6) pra ficar compativel com a versão
mas mesmo assim não resolveu

Tarsisjaneiro 2nd, 2010 at 17:21

dando uma olhada com calma no php_info percebi que mesmo com o
php.ini chamando a dll 2.0.2, o info estava mostrando como instalada a 2.0.4
ai eu exclui a 2.0.4 da pasta entao funcionou.

O problema anterior era devido á versão. dai quando baixei a outra dll nao retirei a que estava.
ficaram duas.

Muito obrigado pela atenção Ricardo!
Que seu 2010 seja repleto de felicidade e paz!!

Tylëragosto 6th, 2010 at 19:01

Tô com o WampServer Version 2.0, php 5.3.0, sdebug php_xdebug-2.0.4-5.3.0-vc6.dll

Configurei mas não funcionou, o netbeans não conectava

Daí alterei pras configurações que o netbeans sugeria e mesmo assim não funcionou ~~

Tylëragosto 6th, 2010 at 19:05

meu phpinfo

http://i30.servimg.com/u/f30/11/80/81/44/xdebug10.jpg

Tylëragosto 10th, 2010 at 11:34

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

Darknovembro 16th, 2010 at 19:58

um artigo bom e recente:

http://ruilima.com/2010/11/ambiente_de_desenvolvimento_php_netbeans_xdebug/

Comente este artigo

Seu comentário: