字体:  

使用xdebug调试PHP程序

taozi05 发表于: 2008-8-28 13:00 来源: PHPChina 开源社区门户

Go on..现在我们来从最简单的程序调试开始一步步介绍Xdebug。

为什么需要Debugger?

很 多PHP程序员调试使用echo、print_r()、var_dump()、printf()等,其实对于有较丰富开发经验的程序员来说这些也已经足够 了,他们往往可以在程序执行的过程中,通过输出特定变量的值可以判断程序执行是否正确,甚至效率高低也可以看出来(当然可能还需要使用一些时间函数)。那么我们为什么还需要一个专门的调试程序来监控我们的程序运行呢? 这个问题的答案不妨留到后面来揭晓。

什么是Xdebug? Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况。Xdebug现在的最新版本是xdebug2.0.0beta6,支持PHP4/PHP5。官方站点:www.Xdebug.org

如何安装Xdebug?
以PHP5.1.4,Windows平台为例(其它PHP版本,其它平台请参看官网文档):

1. 登录www.xdebug.org,在首页右侧有一个Windows modules,选择其中的PHP5.1.2+,下载php_xdebug-5.1.2-2.0.0beta6.dll文件;

2.将下载的php_xdebug-5.1.2-2.0.0beta6.dll放到C:\php5\ext目录,重命名为php_xdebug.dll;

3. 编辑php.ini,加入下面几行: extension=php_xdebug.dll[Xdebug] xdebug.profiler_enable=onxdebug.trace_output_dir="I:\Projects\xdebug"xdebug.profiler_output_dir="I:\Projects\xdebug" 后面的目录“I:\Projects\xdebug”为你想要放置Xdebug输出的数据文件的目录,可自由设置。

4. 重启Apache;

5.写一个test.php,内容为<?php phpinfo();?>,如果输出的内容中有看到xdebug,说明安装配置成功。


现在我们就可以开始使用Xdebug强大的功能了!





调试:
我们先写一个可以导致执行出错的程序,例如尝试包含一个不存在的文件。
testXdebug.php


<?php



require_once(‘abc.php’);



?>






然后通过浏览器访问,我们惊奇地发现,出错信息变成了彩色的了:

不过除了样式改变,和我们平时打印的出错信息内容没什么不同,意义不大。好,我们继续改写程序:

testXdebug2.php


<?php
testXdebug();
function testXdebug() {

require_once('abc.php');

}
?>


输出信息:

发现了什么? Xdebug跟踪代码的执行,找到了出错的函数testXdebug()

我们把代码再写得复杂一些: 


testXdebug3.php


<?php
testXdebug();
function testXdebug() {

requireFile();

}
function requireFile() {

require_once('abc.php');

}
?>

输出信息:

呵呵,也就是说Xdebug具有类似于JavaException的“跟踪回溯”的功能,可以根据程序的执行一步步跟踪到出错的具体位置,哪怕程序中的调用很复杂,我们也可以通过这个功能来理清代码关系,迅速定位,快速排错。


[ 本帖最后由 taozi05 于 2008-8-28 13:07 编辑 ]

最新回复

taozi05 at 2008-8-28 13:08:39
ding xia
taozi05 at 2008-8-28 13:19:14
ding
taozi05 at 2008-8-29 09:16:26
在定
peacock at 2008-8-29 09:19:50
xdebug不错,可惜不能和zend debugger共存
taozi05 at 2008-8-29 11:53:07
呵呵。

这个没细看。你可以google下
laruence at 2008-8-29 12:07:26
呵呵,你并没有理会到xdebug的真正用处

至于你说的出错栈,,,不需要xdebug也可以看到

set_error_handler 让他调用:
debug_print_backtrace

即可.
taozi05 at 2008-8-29 18:13:29
是吗?也不是经常用。到
DeepBlue at 2008-9-16 14:12:28
呵呵,刚装了xdebug,学习了!
Haohappy at 2008-9-16 14:44:39
-_-直接从我的Blog贴过来的,连图都还在。 至少该写个原作者吧。。
ronin at 2008-9-16 14:48:34
试了好多次,可以配置上xdebug和Zend debugger,但是只要xdebug启用了,Zend debugger就会被忽略,不过xdebug好不少,特别是配置了WinCacheGrind(linux使用kcachegrind),算比较完美
shanji at 2008-9-16 15:44:37
试试看