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
Publicidade

20 comentários

  1. Rogerio disse:

    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

  2. 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!

  3. Manuel disse:

    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.

  4. Manuel disse:

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

  5. manuel disse:

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

  6. 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.

  7. Flávio Nunes disse:

    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.

  8. Flávio Nunes disse:

    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.

  9. Tarsis disse:

    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!!

  10. 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!

  11. Tarsis disse:

    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.

  12. 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.

  13. Tarsis disse:

    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

    • Renny Sants disse:

      Parem de bater cabeça: abra a página do phpinfo.php no browser, ao aparecer, selecione tudo, copie e cole no quadrado em branco desta página: http://xdebug.org/wizard.php e de pois clique abaixo em analise my phpinfo, pronto
      Ela vai lhe informar se está instalado ou não xdebug, qual a versão e se não estiver a página vai informar quanl versão xdebug você deve baixar, onde deve copiá-la e qual endereço você deve colocar no php.ini
      Ela é um suporte do xdebug.

  14. Tarsis disse:

    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!!

  15. Tylër disse:

    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 ~~

  16. 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

  17. Very nice post. I just stumbled upon your weblog and wished to say that I have really enjoyed browsing your blog posts.
    In any case I’ll be subscribing to your feed and I hope you
    write again soon!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *