Sunday, 8 October 2006

PHP Remote Debugging - Xdebug

PHP Remote Debugging,另一个比较流行的调试模块是Xdebug。Xdebug,使用上非常方便,在遇到exception的时候,能够将Application当前的状况,变量、call trace等信息,友好地直接输出到web页面上。

Xdebug上下载Xdebug for PHP的扩展模块,将其置于PHP的ext目录中。在php.ini中增加,

extension=php_xdebug.dll

xdebug.show_exception_trace=on
xdebug.show_local_vars=on

这样就可以在Web Application遇到语法或值溢出等exception的时候,显示相关变量和调用堆栈。

对于PHP Remote Debugging,需要在php.ini中对Xdebug进行更多的设置。

zend_extension_ts="ext/php_xdebug.dll"
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.idekey=<idekey>
xdebug.show_exception_trace=on
xdebug.show_local_vars=on
xdebug.show_mem_delta=on

并将和Zend Optimizer有关的选项全部关闭。在phpinfo()中,检查是否成功启动Xdebug。

Xdebug支持多个调试协议,GDBDBGp和PHP3。这里使用的是DBGp,一个基于XML的多语言调试协议。

目前,Xdebug的最新版本是2.0.0 Beta。和DBG Debugger相比,支持Xdebug的IDE还不太多。这里以Komodo为例,说明基于Xdebug扩展,如何进行Remote Debugging。

安装好Komodo 3.5.3之后,设置Preferences - Debugger - Proxy中的,

Listen for debug connections on port: 9000

再选择Debug - Listen for Remote Debugger。如果出现勾号,没有出错信息的话,Komodo is ready for remote debugging。

输入Xdebug调试开始指令,

http://localhost/myscript.php?XDEBUG_SESSION_START=1

切换到Komodo,对PHP程序进行在线调试。

上述指令,会启动一个持续的Xdebug调试session,后续PHP脚本会自动进入在线调试状态。也可以只对单个PHP脚本进行单次Remote Debugging。

http://localhost/myscript.php?XDEBUG_SESSION_START

这样就不需要再输入调试中止指令,直接退出Remote Debugging。调试中止指令,格式如下,

http://localhost/myscript.php?XDEBUG_SESSION_STOP

需要指出的是,XDEBUG_SESSION_STOP不会立即停止对当前PHP的在线调试,而是停止对此以后的PHP的Remote Debugging。

Xdebug提供了一个xdebug_break()函数,直接在程序中设置断点,而不是在Komodo中设置。

0 Comments:

Post a Comment

<< Home