原文地址:http://www.leapsoul.cn/?p=935
说道PHP代码调试,对于有经验的PHPer,通过echo、print_r、var_dump函数,或PHP开发工具zend studio、editplus可解决大部分问题,但是对于PHP入门学习的童鞋来说有一定的难度,而且仅仅通过上述这些PHP调试手段,也很难准确发现PHP性能方面的问题,Xdebug是一个非常有用的PHP调试工具。
Xdebug作为PHP调试工具,提供了丰富的调试函数,也可将Xdebug安装配置为zend studio、editplus调试PHP的第三方插件,通过开启自动跟踪(auto_trace)和分析器功能,可以直观的看到PHP源代码的性能数据,以便优化PHP代码。今天和大家分享PHP调试工具Xdebug安装以及配置方面的基础知识。
Xdebug在PHP中的安装配置涉及php.ini配置文件的修改。
Xdebug安装教程
下载Xdebug
首先我们需要下载Xdebug,务必根据安装的PHP版本,选择合适的Xdebug版本,由于我是在Windows环境下安装PHP的(请参考Windows 7下安装配置PHP+Apache+Mysql环境教程),所以选择下载Windows版本的Xdebug2.1.0(5.3 VC6 (32 bit)),下载下来的Xdebug文件为php_xdebug-2.1.0-5.3-vc6.dll,这是由于Xdebug是作为PHP模块的形式被安装配置与使用的。
Xdebug安装提示:如果你不清楚安装的PHP版本,你可以通过phpinfo()函数参看,同时Xdebug也提供了phpinfo输出信息分析工具来帮助你分析如何安装Xdebug,只要将phpinfo输出信息复制提交即可,地址:Xdebug phpinfo信息分析地址
安装Xdebug
将下载的php_xdebug-2.1.0-5.3-vc6.dll复制到PHP安装目录下的ext目录,此处为C:\php\ext,ext目录专门用来存放PHP扩展库DLL文件。
配置php.ini
安装Xdebug的最后一步就是配置php.ini文件,打开C:\php目录下的php.ini配置文件,在末尾添加
1 2 |
[Xdebug] zend_extension="c:/php/ext/php_xdebug-2.1.0-5.3-vc6.dll" |
最后重启Apache服务器,通过phpinfo()函数,可以看到
Xdebug配置提示:PHP5.3之前版本配置Xdebug时使用zend_extension_ts,对于PHP5.3以上版本,使用zend_extension。
XDEBUG NOT LOADED AS ZEND EXTENSION信息出现的原因
出现XDEBUG NOT LOADED AS ZEND EXTENSION的原因是在安装Xdebug时由于我们将Xdebug的DLL文件复制到了php\ext目录下,容易以PHP扩展库的形式加载Xdebug,在php.ini文件中添加了
1 |
extension=php_xdebug-2.1.0-5.3-vc6.dll
|
这是错误的Xdebug安装方式,必须以zend方式加载!
至此PHP Xdebug的基础安装教程就结束了,下面我们需要对Xdebug作一些基础配置。
Xdebug配置教程
在安装完Xdebug后,我们还需要对Xdebug做基础配置,默认Xdebug的PHP函数自动跟踪(auto_trace)功能、分析器功能并没有开启,作为调试PHP代码的需要,有些Xdebug配置选项最好开启。
在此之前我们需要创建Xdebug自动跟踪以及分析器输出文件的存放目录,务必确保目录是可读写的,此处我在D:\PHPWeb\下创建了xdebug\trace以及xdebug\profiler目录。
最后在php.ini配置文件中完成Xdebug的配置工作,找到
1 2 |
[Xdebug] zend_extension="c:/php/ext/php_xdebug-2.1.0-5.3-vc6.dll" |
在此之后添加Xdebug配置信息
1 2 3 4 5 6 |
xdebug.auto_trace=1 xdebug.collect_params=1 xdebug.collect_return=1 xdebug.trace_output_dir="D:/PHPWeb/xdebug/trace" xdebug.profiler_enable=1 xdebug.profiler_output_dir="D:/PHPWeb/xdebug/profiler" |
最后保存php.ini,并重启Aapche服务器即可。
Xdebug部分配置选项说明
xdebug.auto_trace = 1
是否允许Xdebug跟踪函数调用,跟踪信息以文件形式存储,默认值为0
collect_params = 1
是否允许Xdebug跟踪函数参数,默认值为0
xdebug.collect_return = 1
是否允许Xdebug跟踪函数返回值,默认值为0
xdebug.profiler_enable = 1
打开xdebug的性能分析器,以文件形式存储,这项配置是不能以ini_set()函数配置的,默认值为0
xdebug.profiler_output_dir
性能分析文件的存放位置,默认值为/tmp
xdebug.profiler_output_name
性能分析文件的命名规则,默认值为cachegrind.out.%p
xdebug.trace_output_dir
函数调用跟踪信息输出文件目录,默认值为/tmp
xdebug.trace_output_name
函数调用跟踪信息输出文件命名规则,默认为trace.%c
针对zend studio配置Xdebug的教程
打开PHP安装目录(如何安装配置PHP?)下的PHP.INI配置文件,我的是C:\PHP目录,找到Xdebug配置信息,在此基础上添加如下Xdebug配置信息
1 2 3 4 |
xdebug.remote_enable=true //Xdebug允许远程IDE连接 xdebug.remote_host=127.0.0.1 //允许连接的zend studio的IP地址 xdebug.remote_port=9000 //反向连接zend studio使用的端口 xdebug.remote_handler=dbgp //用于zend studio远程调试的应用层通信协议 |
重要说明:这里容易忽视的一个问题是xdebug.remote_host信息的配置,如果你使用的是局域网或无线路由器,将xdebug.remote_host配置为127.0.0.1是无用的,会导致无法使用zend studio调试PHP,zend studio的单步调试按钮也无效!必须将xdebug.remote_host配置为zend studio安装机器的实际地址,IP地址可以通过ipconfig查看,由于我使用的是无线路由器,所以我将xdebug.remote_host配置为192.168.1.100。
最后重启apache服务器。
Ok,下面我们就可以使用Xdebug在zend studio中进行调试工作了。
由于zend studio默认支持调试PHP的工具是zend debugger,所以首先需要将zend studio PHP Debug选项配置为Xdebug,才能使用Xdebug。
zend studio使用Xdebug调试PHP步骤一
打开zend studio7,选择菜单Project->Properties,然后在弹出界面中选择左侧PHP Debug选项,如图
勾选 Enable project specific settings选项,并选择PHP Debugger选项中的Xdebug选项,最后点击确定即可。
说明:在使用zend studio调试PHP时,有时会出现一个问题,即zend studio调试PHP文件时没有使用Xdebug进行调试,可通过点击左侧上方的项目窗口选择具体的项目或项目文件,右击选择Properties选项进行配置,界面和上图一样。
在zend studio中使用Xdebug调试PHP源码
使用zend studio调试PHP,主要通过Debug As菜单,共有三种选择PHP Script、PHP Web Page、PHP Unit Test,此处选择PHP Web Page,由于可能存在同一PHP文件之前使用zend studio调试PHP时并没有选择使用Xdebug,需要清除旧的调试文件,可以通过Debug Configurations菜单清除上述三种zend studio调试方式中的文件,此处选择的是PHP Web Page,所以只要将此项中的文件清除即可。
Debug Configurations可通过三种方式进入:1、右击需要调试的PHP文件,选择Debug As或者打开调试的PHP文件;2、选择菜单栏上Run菜单下的Debug As进入;3、点击菜单栏Run菜单下方小蜘蛛图标旁的向下箭头选择Debug Configurations。
Debug Configurations配置完毕后,可打开需要使用zend studio调试的PHP文件选择Debug As中的PHP Web Page选项,核对好Launch Url后点击Ok即可调试,Xdebug在zend studio中调试PHP文件的画面如图
如图你可以通过单步调试(F5)对PHP文件进行调试,只要Xdebug配置正确,在调试代码窗口中会出现选中的淡绿色背景代码,否则单步调试(F5)功能是失效的。
注:有时会有9000端口冲突问题!!!