Como depurar código PHP com Eclipse, PDT e XDebug

Continuando a configuração do meu Fedora 15, segue como fiz para conseguir depurar programas PHP.

Numa tacada só vamos instalar todos os programas necessários para depurar programas PHP no Eclipse usando PDT e XDebug em um ambiente recém instalado com o Fedora 15 Live CD, sem segredinhos ou pacotes extras é a instalação padrão mesmo.

Para tal execute o comando abaixo com o usuário root, que ira instalar o Eclipse, o Apache, o MySQL, o PHP com suporte ao XDebug e MySQL:

yum install eclipse mysql-server mysql phpmyadmin php httpd php-devel php-pecl-xdebug

Ao término da instalação, um arquivo xdebug.ini deverá ter sido criado em /etc/php.d como este do exemplo abaixo:

; Enable xdebug extension module
zend_extension=/usr/lib/php/modules/xdebug.so

Mas ainda falta alguns parâmetros para deixa-lo redondinho, deixe seu arquivo igual ao conteúdo abaixo:

; Enable xdebug extension module
zend_extension=/usr/lib/php/modules/xdebug.so
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9100
xdebug.extended_info=1

Para facilitar a depuração dos arquivos é interessante configurar para que o Apache utilize o recurso UserDir, assim todos os seus projetos php poderão ficar abaixo da pasta home do seu usuário, local onde normalmente criamos a pasta workspaces do Eclipse, depois veremos como fiz isto.

Agora vamos habilitar o UserDir no http.conf, para tal precisamos edita-lo e alterá-lo, no Fedora 15 ele está na pasta /etc/httpd/conf/.
Procure por mod_userdir e comente a linha UserDir disable e descomente a linha UserDir public_html trocando o local de public_html para workspaces. Sugiro colocar este local, porque depois vamos definir como pasta padrão do Eclipse o caminho /home/[Meu Usuário]/workspaces.

Seu bloco de configuração do UserDir no httpd.conf deve ficar como este:

<IfModule mod_userdir.c>
    #UserDir disabled
    UserDir workspaces
</IfModule>

Reinicie o Apache:

service httpd restart

Abra o Eclipse.

eclipse

Se é a primeira vez que você faz isto uma tela perguntando qual o espaço de trabalho deverá ser utilizado deve ser apresentada (figura abaixo), aponte este local para /home/[Meu Usuário]/workspaces e marque a opção para Utilizar como padrão e não perguntar novamente se julgar conveniente.

Espaco Trabalho Inicialização Eclipse

Caso você já tenha definido algum outro caminho, você pode acessar o menu Janelas -> Preferências e depois Geral -> Iniciar e Encerrar -> Workspaces e trocar o local. Veja figura:

Alterando o espaço de trabalho Eclipse

Ainda no Eclipse, vamos ajustar alguns parâmetros para poder depurar os programas.
Agora acesse o menu Janelas -> Preferências e depois PHP -> Debug -> Installed Debuggers. Nesta tela, conforme figura a seguir, selecione XDebug e clique em Configure, uma nova tela será aberta, defina no parâmetro Debug Port o valor 9100, observe que deve ser a mesma porta que definimos no arquivo xdebug.ini citado anteriormente.

xdebug1

Ainda no menu Preferências, acesse PHP -> PHP Executables selecione o aplicativo PHP (Workspace Default), se existir e clique em Edit… ou adicione um se não houver, clicando em Add…, a tela citada deve ser como esta da figura a seguir:

xdebug3_

Defina o executável do PHP, no meu Fedora 15 o caminho é /usr/bin/php, dê um nome, sugiro PHP mesmo, selecione CLI na opção SAPI Type e XDebug no parâmetro PHP Debugger, conforme figura abaixo:

xdebug3

Pronto de se tudo correu bem, já temos um Eclipse com depurador PHP, vamos testar?

Primeiro teste a configuração do UserDir do Apache, para isto crie um arquivo com o nome index.php dentro da pasta /home/[Meu Usuario]/workspaces, com o seguinte conteúdo:

<?php
phpinfo();
?>

Certifique-se de que as permissões da pasta /home/[Meu Usuario] é 711 com o comando:

chmod -Rf 711 /home/[Meu Usuario]

E que os arquivos da workspaces estão com a permissão 755 usando:

chmod -Rf 755 /home/[Meu Usuario]/workspaces

Ok, agora no browser podemos acessar usando o endereço http://localhost/~[Meu Usuario]/index.php, se tudo correu bem a saída da função phpinfo() deve ser exibida.

Pronto, vá no seu projeto ou arquivo PHP e clique com o botão direito e selecione Depurar como e depois Depurar Configurations, uma tela como esta a seguir deve ser apresentada:

depurar como eclipse php

Nela clique duas vezes em PHP Web Page ou clique uma única vez e depois clique em novo para que possamos criar uma configuração para depurar este projeto/arquivo PHP. Na configuração você deve dar uma nome de sua preferência no campo Nome, selecionar XDebug no parâmetro Server Debugger, no PHP Server deixar o default, no campo File clique em Browse e selecione o arquivo principal do seu projeto e atente ao detalhe a seguir.
Como definimos o parâmetro UserDir, para funcionar direitinho precisamos dizer para a configuração do debug a URL correta, isto pode ser feito alterando o parâmetro URL, para tal desmarque a opção Auto Generate e coloque antes da URL gerada automaticamente o caminho do seu usuário precedido do “~”, conforme figura abaixo:

Configuração do debug Eclipse PHP

Aplique as configurações e feche esta janela. Agora você pode clicar com o botão direito no seu arquivo/projeto PHP e selecionar Depurar como -> PHP Web Page, pronto já podemos debugar, claro não esqueça de colocar algum breakpoint no projeto, caso contrário ele não vai parar em lugar nenhum. Para marcar breakpoints de um duplo clique ao lado esquerdo da linha que deseja parar.

Por fim, até que da um trabalhinho configurar, mas vale a pena, pois usar o echo para encontrar falhas é pra matar o programador.

Deixe uma resposta