为什么需要Debugger?
很多PHP程序员调试使用echo、print_r()、var_dump()、printf()等,其实对 于有较丰富开发经验的程序员来说这些也已经足够了,他们往往可以在程序执行的过程中,通过输出特定变量的值可以判断程序执行是否正确,甚至效率高低也可以 看出来(当然可能还需要使用一些时间函数)。那么我们为什么还需要一个专门的调试程序来监控我们的程序运行呢? 这个问题的答案不妨留到后面来揭晓。
什么是Xdebug?
Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况。
<FONT style="COLOR: #0000ff">如何安装Xdebug?:
<FONT style="COLOR: #ff0000">1. 打开http://www.xdebug.org/download.PHP下载相应的版本Win:Windows binaries版本
Linux:source
得到一个dll文件(win)或运行安装文件(linux)
<FONT style="COLOR: #ff0000">2. 安装
Win:将下载的dll文件放到相应的目录中。比如我的就放D:\xampp\PHP\ext下面;
Linux:执行安装文件
tar -xvzf xdebug-2.1.2.tgzcd xdebug-2.1.2
PHPize (如果PHPize没有这个command,需要安装一次PHPize。PHPize可以让PHP支持扩展模块)安装PHPize:sudo apt-get install PHP5-dev
如果安装了继续进行下面命令
<FONT style="COLOR: #008000">./configure
make
make install
会有这个界面
cp modules/xdebug.so /usr/lib/PHP5/20090626+lfs 将xdebug.so文件移到PHP5下面PHP.ini,加入下面几行:
[Xdebug]
zend_extension=D:\xampp\PHP\ext\PHP_xdebug.dll (Win)
zend_extension=/usr/lib/PHP5/20090626+lfs/xdebug.so(Linux)xdebug.profiler_enable=on
xdebug.trace_output_dir="../Projects/xdebug"
xdebug.profiler_output_dir="../Projects/xdebug"
后面的目录“../Projects/xdebug”为你想要放置Xdebug输出的数据文件的目录,可自由设置。
PHP,内容为,如果输出的内容中有看到xdebug,说明安装配置成功。
如下图:
Xdebug文件。
testXdebug.PHP
PHP
(‘abc.PHP');
?>
彩色的了:
内容没什么不同,意义不大。好,我们继续改写程序:
testXdebug2.PHP
PHPtestXdebug();
testXdebug(){
('abc.PHP');
}
?>
输出信息:
Xdebug代码的执行,找到了出错的函数testXdebug()代码再写得复杂一些: testXdebug3.PHP
testXdebug();
function testXdebug() {
requireFile();
}
function requireFile() {
require_once('abc.PHP');
}
?>
输出信息:
XdebugJavaException功能,可以根据程序的执行一步步跟踪到出错的具体位置,哪怕程序中的调用很复杂,我们也可以通过这个功能来理清代码关系,迅速定位,快速排错。
PHP函数功能,但是要注意函数只在PHP4.3.0PHP5函数是PHPPHP5函数,然后又反向移植到PHP4.3
microtime()函数来确定当前时间。例如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";
?>
microtime()0.03520000 1153122275函数microtime_float()Xdebug自带了一个函数显示时间。
如何测定脚本占用的内存?
,PHP函数memory_get_usage()函数只有当PHP-enable-memory-limitXdebug函数功能,另外xdebug函数来查看内存占用的峰值。
代码中的不足?
代码没有明显的编写错误,没有显示任何错误信息(如errorwarningnotice代码就是正确无误的。有时候可能某段代码执行时间过长,占用内存过多以致于影响整个系统的效率,我们没有办法直接看出来是哪部份代码出了问题。这时候我们希望把代码的每个阶段的运行情况都监控起来,写到日志文件中去,运行一段时间后再进行分析,找到问题所在。
PHP.ini文件
加入
[Xdebug]
xdebug.profiler_enable=on
xdebug.trace_output_dir="I:\Projects\xdebug"
xdebug.profiler_output_dir="I:\Projects\xdebug"
文件写入到”../Projects/xdebug生成了一堆文件,例如cachegrind.out.1169585776文件。这些就是Xdebug生成的分析文件。用编辑器打开你可以看到很多程序运行的相关细节信息,
Xdebug自带的函数,并对已有的某些PHP函数进行覆写,可以方便地用于调试排错;Xdebug文件的分析,我们可以迅速找到程序运行的瓶颈所在,提高程序效率,从而提高整个系统的性能。
原文链接:https://www.f2er.com/php/26174.html