Posts Tagged ‘WAMP’

PHP Debug – XDebug, Eclipse PDT & WAMP

Monday, July 13th, 2009
Autor: nuno.lourenco


Sim irei falar neste post sobre PHP. Razão – Depuração de erros.

A depuração de erros até hoje em PHP que seguia a norma de var_dumps e echos. Ou seja, a funcionalidade de definir um breakpoint e poder visualizar o que se pretende, simplesmente não estava disponível (pois não existia um IDE para o efeito como o Zend).

Decidi investigar se haveria modo para o fazer. A conclusão é de que sim. Os debuggers disponíveis (que eu conheça) são: Zend Debugger; XDebug.

Modifiquei todo o set de ferramentas para desenvolver em PHP. O IDE usado foi o Eclipse com o plug-in PDT. Para servidor web instalei o WAMP 2. Instalei por fim o debugger PHP – XDebug. XDebug porquê? Porque é uma versão gratuita.

A documentação do  XDebug está disponível online. Para o usar é necessário obter uma versão do debugger para a versão PHP do servidor (no meu caso PHP 5.2.9-2). E é tudo…

Se tudo fosse assim tão fácil :)

O IDE Eclipse possibilita a definição do debugger para PHP. Para configurar o debugger a usar é necessário definir qual o tipo de debugger, o servidor e a versão do PHP (definindo o executável da versão), como ilustra a figura seguinte:

PHP-Debug
PHP Debug window – fig. 1

Os debuggers fornecidos com o plug-in PDT são: Zend Debugger; XDebug. Debuggers esses que estão configurados por omissão, como ilustra a figura seguinte:

PHP-Debuggers
PHP Debuggers window – fig. 2

Falta a definição do executável PHP e do servidor. Para definir o executável PHP segue-se o link “PHP Executables…” como na figura 1. Os passos a seguir para adicionar o executável é seguir a acção do botão “Add…”, figura 4.

PHP-Executables-Config
PHP Executable Add window – fig. 3

Definem-se os campos Name e Executable path para definir o nome a dar a configuração e o local onde reside o executável PHP (na minha versão é o PHP 5.2.9-2), como ilustrado na figura 3. Importante de notar é que a configuração que se criou serve para um tipo de debugger, que será um dos disponíveis como ilustrado na figura 2. No final será esta configuração criada a que se usará na figura 1.

PHP-Executables
PHP Executables window – fig. 4

Por fim falta apenas a definição do servidor (ver figura 5):

PHP-ServersPHP Servers window – fig. 5

Mais uma vez, no meu caso, estarei a testar o site que reside na root do localhost.

Os passos anteriores configuraram o IDE para uso com um debugger, no caso o XDebug. Para se poder efectuar debug em PHP com inserções de breakpoints é necessário configurar o runtime PHP. Para tal, é necessário definir algumas configurações no ficheiro php.ini.

zend_extension_ts = "C:/wamp/bin/php/php5.2.9-2/ext/php_xdebug-2.0.4-5.2.8.dll"

[xdebug]
; General
xdebug.default_enable = On
xdebug.show_exception_trace = On
xdebug.show_local_vars = 9
xdebug.max_nesting_level = 50
xdebug.var_display_max_depth = 6
xdebug.collect_params = 4
xdebug.collect_includes = On
xdebug.collect_return = On
xdebug.show_mem_delta = On
xdebug.idekey=ECLIPSE_XDEBUG

; Dump options
xdebug.dump_once = On
xdebug.dump_globals = On
xdebug.dump_undefined = On
xdebug.dump.REQUEST = *
xdebug.dump.SERVER = *

; Trace options
xdebug.trace_format = 0
xdebug.auto_trace = On
xdebug.trace_output_dir = "c:/wamp/tmp/xdebug"
xdebug.trace_output_name = trace.%c.%p

; Remote settings
xdebug.remote_enable=On
xdebug.remote_autostart=On
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_log="c:/wamp/tmp/xdebug/xdebug.log"

; Profiling
xdebug.profiler_output_dir = "c:/wamp/tmp/xdebug"
xdebug.profiler_output_name = "cachegrind.out.%p"
xdebug.profiler_enable = Off
xdebug.profiler_append= Off
xdebug.extended_info= On

Nem todas as configurações aqui definidas são necessárias, apenas as coloquei para que estivessem transcritas na íntegra tal como definifas no servidor (configuração que estou a usar).

Ter em atenção que apenas uma definição para a extensão do debugger pode estar definida para o correcto funcionamento.

Dependendo da versão do PHP também depende a versão do debugger, como também a definição da extensão no ficheiro php.ini.

zend_extension_ts = "C:/wamp/bin/php/php5.2.9-2/ext/php_xdebug-2.0.4-5.2.8.dll"

A definição da extensão ora será: zend_extension_ts  / zend_extension. Não poderá existir a configuração:

extension = "C:/wamp/bin/php/php5.2.9-2/ext/php_xdebug-2.0.4-5.2.8.dll"

E é tudo, happy coding. Para qualquer dúvida é favor contactar.


Better Tag Cloud