【PHP】调试工具xdebug的配置说明



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


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

1、去www.xdebug.org下载相应版本php的模块文件,保存下载后的文件到php的ext目录,可以自己修改文件的名称,如保存成:php_xdebug.dll
2、修改php.ini,增加如下信息,在文件的最后

[Xdebug]
zend_extension_ts="c:/php5/ext/php_xdebug.dll"
xdebug.auto_trace=On
xdebug.collect_params=On
xdebug.collect_return=On
xdebug.trace_output_dir="x:/xdebug"
xdebug.profiler_enable=On
xdebug.profiler_output_dir="x:/xdebug"

建立Debuginfo目录x:/xdebug,否则不会才能生成文件。
zend_extension_ts要是完整路径才有效

参数解释:

  • zend_extension_ts="c:/webserver/php5/ext/php_xdebug.dll"
    加载xdebug模块。这里不能用extension=php_xdebug.dll的方式加载,必须要以zend的方式加载,否则安装上后,phpinfo是显示不出xdebug这个项的。
  • xdebug.auto_trace=on;
    自动打开“监测函数调用过程”的功模。该功能可以在你指定的目录中将函数调用的监测信息以文件的形式输出。此配置项的默认值为off。
  • xdebug.collect_params=on;
    打开收集“函数参数”的功能。将函数调用的参数值列入函数过程调用的监测信息中。此配置项的默认值为off。
  • xdebug.collect_return=on;
    打开收集“函数返回值”的功能。将函数的返回值列入函数过程调用的监测信息中。此配置项的默认值为off。
  • xdebug.trace_output_dir=”c:\Temp\xdebug”;
    设定函数调用监测信息的输出文件的路径。
  • xdebug.profiler_enable=on;
    打开效能监测器。
  • xdebug.profiler_output_dir=”c:\Temp\xdebug”;
    设定效能监测信息输出文件的路径。
  • 还有一些更为具体的参数设定,详见:http/www.xdebug.org/docs-settings.php
3、重启apache这样,在本地运行php的时候,会在所设定的目录里产生一些调试信息的文件:
  • 函数调用过程监测信息文件的文件名格式:trace.XXXXXX.xt。这个文件可以直接查看,里面包含了函数运行的时间,函数调用的参数值,返回值,所在的文件和位置等信息。内容格式还是相对直观的。
  • 效能监测文件的文件名格式:cachegrind.out.XXXXXXXX。
    这个文件也可以直接查看,不过信息格式不易被人类所理解,
    所以我们需要接下来的一个软件。

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


 

5.安装wincachegrind
我们需要一个工具来读取分析效能监测文件cachegrind.out.XXXXXXXXXXX。windows下就有一款这样的软件:wincachegrind。

  • 下载安装wincachegrind 下载地址:http://sourceforge.net/projects/wincachegrind/
  • 安装运行后,点击Tools->options,设定你的working folder(php.ini里xdebug.profiler_output_dir的值)
  • 这样就可以比较直观的查看效能监测文件的信息了。