PHP程序中xdebug工具简要使用方法

  • PHP程序的debug

PHP程序的debug,无论是cli方式还是web方式,都需要使用第三方的debug工具。PHP5.6之前,本身自带的debug功能,仅限于日志输出。

推荐使用免费xdebug。Xdebug作为zend扩展存在。可以在php安装后,通过phpize单独被编译安装。

xdebug的安装有几点注意

  1. 如果不知道下载什么xdebug版本,可以在这里,通过上传phpinfo信息,由系统给出建议:http://xdebug.org/wizard.php
  2. 安装后,php.ini中需要指定的xdebug.so方式,可能因为php版本不同而不同。详情见此:http://xdebug.org/docs/all#configure-php
  3. make install如果安装不成功,可以去modules文件夹下,手动拷贝xdebug.so到1中建议的文件夹下

xdebug的使用有几点注意

  1. 如果需要设置断点和单步跟踪,可以使用xdebug自带的debugclient。位于debugclient文件夹下。安装方法:http://xdebug.org/docs/all#debugclient
  2. xdebug的代码跟踪,都是通过remote debug来完成;debugclient其实是起了一个server用于监听并等待需要debug的请求;所有的断点设置都是通过debugclient去进行的。详细的控制命令,可以参考:http://xdebug.org/docs-dbgp.php
  3. PHP采用debugclient作为server,而不是类似Java的remote debug方式。其原因在于一方面PHP代码不是类似Java编译执行可以直接看到源码,另一方面debugclient可以根据会话设置,来区分对哪些请求才需要进行debug和单步追踪。这对多并发的web应用是非常有意义的(当然java也可以通过设置条件断点来实现)。参考:http://xdebug.org/docs/all#activate_debugger
  4. 对于cli的php程序进行debug时,需要设置XDEBUG_CONFIG。可以参考:http://stackoverflow.com/questions/13284795/setting-xdebug-breakpoints-solely-in-command-line

关于gdb进行PHP程序的debug,主要用于对zend engine本身、PHP源码和扩展的debug。这也是为什么php源码中自带gdb脚本.gdbinit的原因。