使用Xdebug调试PHP程序
刚开始接触程序的PHP程序员习惯使用echo / print_r() / var_dump() / printf() 或者是封装自己的函数来进行程序的调试。这些对于一般的程序功能调试已经说是可以的了。
但是有的时候这些不能满足一些特殊的功能,下面我来介绍一下Xdebug进行的程序调试。
Xdebug是一款开放源代码的PHP程序调试器,可以用来跟踪、调试和分析PHP程序的运行状况。Xdebug的具体功能包括:对栈和函数的执行过程进行跟踪,显示内存占用和变量值,以及判断程序的执行效率等。
Xdebug的安装。安装的流程在网上找一下很多 ,百度上面的资料有很多,我把重点放在Xdebug的使用方面,我这边直接用的是WampServer2.1e-x32,安装完之后,Xdebug是默认配置好的,下面的是别人整理的Xdebug的配置信息。
;是否开启自动跟踪
xdebug.auto_trace= On
;是否开启异常跟踪
xdebug.show_exception_trace= On
;是否开启远程调试自动启动
xdebug.remote_autostart= On
;是否开启远程调试
xdebug.remote_enable= On
;允许调试的客户端IP
xdebug.remote_host=192.168.1.107
;远程调试的端口(默认9000)
xdebug.remote_port=9000
;调试插件dbgp
xdebug.remote_handler=dbgp
;是否收集变量
xdebug.collect_vars= On
;是否收集返回值
xdebug.collect_return= On
;是否收集参数
xdebug.collect_params= On
;跟踪输出路径
xdebug.trace_output_dir="c:\xdebug"
;是否开启调试内容
xdebug.profiler_enable=On
;调试输出路径
xdebug.profiler_output_dir="c:\xdebug"
安装Xdebug之后,运行文件的结果的样式会发生改变,运行一个错误的程序,Xdebug会一步步跟踪到出错的具体位置。
另外Xdebug会对某些PHP的函数进行覆写,以便更好的进行程序的调试,优化调试程序主要体现在
1:使调试的信息更加的美观
拿var_dump函数来举例,打印数组的时候Xdebug将var_dump打印的形式由
<?php $array = array(1=>'test',2=>'TEST'); var_dump($array); ?>
结果为
array 1 => string 'test' (length=4) 2 => string 'TEST' (length=4)
2:Xdebug测试脚本执行的时间
测试某段脚本的执行时间,通常都需要用到microtime函数来确定当前的时间。但是microtime()函数返回的值是微秒数,完全没有可读性。所以,还需要另外一个microtime_float()函数,然后将两者相加才能得到预期的结果。
在安装Xdebug扩展后,我们可以使用这个函数来高效快速的测试出某段脚本的执行时间。
<?php /** * Simple function to replicate PHP 5 behaviour */ function microtime_float() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } $time_start = microtime_float(); // Sleep for a while usleep(100); $time_end = microtime_float(); $time = $time_end - $time_start; echo"Did nothing in $time seconds\n"; ?>
3:PHP脚本占用的内存
PHP中提供了一个memory_get_usage()函数,其功能就是帮助了解程序执行到某个特定阶段时到底占用了多大内存,但是,该函数只有当PHP编译时使用了参数enable_memory_limit 时才有效,该限制大大的降低了memory_get_usage()函数的使用效率,所以我们可以用这个函数来测试查看内存的占用情况。另外Xdebug还提供了xdebug_peak_memory_usage来查看内存占用的峰值。
实例代码可以参考博客 http://www.sqlstudy.com/article/php-memory-get-usage.html
在PHP100.com共有两讲,下载地址是
http://www.php100.com/html/shipinjiaocheng/PHP100shipinjiaocheng/2011/0103/7201.html
http://www.php100.com/html/shipinjiaocheng/PHP100shipinjiaocheng/2011/0110/7270.html