在前面两篇中,分别提到了如何用DBG和Xdebug扩展模块,在IDE中进行PHP Remote Debugging。
谈到IDE,PHPeclipse也是一个目前比较流行的PHP开发环境。其正式的版本中,使用DBG作为调试器。目前在其开发版本中,包含了对Xdebug的支持。PHPeclipse在使用DBG的时候,不需要DBG Listener,其内置了监听器,缺省所使用得端口也有所改变。
对php.ini进行设置,以实现同时对DBG和Xdebug模块,以及多个PHP IDE的支持。具体的设置如下:
...
extension=php_dbg.dll
[Debugger]
debugger.enabled=on
debugger.profiler_enabled=on
debugger.JIT_enabled=on
debugger.JIT_port=7869, 10000/16
...
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.show_exception_trace=on
xdebug.show_local_vars=on
xdebug.show_mem_delta=on
xdebug.idekey=<idekey>
在使用调试器的时候,不要启用Zend Optimizer。Xdebug必须占用zend_extension_ts,才能进行Remote Debugging。
这里,Xdebug的loading,使用了相对路径,也可以使用绝对路径,以适应PHP扩展模块目录的位置变化。
PHP Remote Debugging,相应的配置要涉及到Web Server端和IDE端,以及实际页面的访问。一开始的时候,有些摸不着头脑,理清楚了,就比较简单。
了解PHP的调试,一定会走到PHP在线帮助的“Appendix E. Debugging PHP”。在这一页的最后,又见到了熟悉的老朋友,一段Python代码,一个简单的在线调试监听器。运行这段Python code之后,在浏览器上输入在线调试指令,真的就连接过来了,从而知道PHP Remote Debugging是如何开始的。
无论DBG还是Xdebug,都在调试开始指令中,包含了所调试PHP脚本的完整的路径名和文件名。这样,IDE就可以直接打开相应的文件进行调试,在本机直接跳过HTTP URL到FS File这样的映射(Mapping)。
所使用的PHP解释器,是Web Server上的那个Parser,而不是IDE附带或连接的PHP。在Remote Debugging的过程中,IDE使用的PHP根本就没有用上。所以,IDE的PHP不必和Web Server的保持一致,甚至可以不设置。
DBG模块,可以对多个Port提供调试支持。PHPeclipse中的调试端口不固定,要写成debugger.JIT_port=7869, 10000/16这个样子。
Remote Debugging的过程,从Client/Server的角度来看,IDE充当了Server,在指定端口上监听调试连接。PHP的DBG和Xdebug扩展模块,则是Client。调试从浏览器的开始指令发起,PHP的调试器从Web Server那里得到调试指令,就去和对应端口的Server,即IDE联系,从而开始一个Remote Debugging的对话。
前面的Post中,提到Xdebug所使用的DBGp,是一个基于XML的多语言调试协议。在DBGp的开始指令中,还包含了脚本语言项。因此,Xdebug is not for PHP only, but also Python, Ruby...。如果在项目中,要在PHP、Python和Ruby之间跨越,使用Xdebug作为Remote Debugging的手段,无疑是非常合适的。这应该就是为什么Komodo选择Xdebug的原因吧。









0 comments so far