微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php Xdebug的安装与使用详解

为什么需要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.tgz
cd 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输出的数据文件的目录,可自由设置。
一个test.PHP内容,如果输出内容中有看到xdebug,说明安装配置成功。

如下图:

Xdebug

一个可以导致执行出错的程序,例如尝试包含一个不存在的文件

testXdebug.PHP

PHP
(‘abc.PHP');
?>
彩色的了:

内容没什么不同,意义不大。好,我们继续改写程序:

testXdebug2.PHP

PHP
testXdebug();
testXdebug(){
('abc.PHP');
}
?>
输出信息:

Xdebug代码的执行,找到了出错的函数testXdebug()代码再写得复杂一些: 

testXdebug3.PHP

代码如下:
PHP
testXdebug();
function testXdebug() {
requireFile();
}
function requireFile() {
require_once('abc.PHP');
}
?>

输出信息:

XdebugJavaException功能,可以根据程序的执行一步步跟踪到出错的具体位置,哪怕程序中的调用很复杂,我们也可以通过这个功能来理清代码关系,迅速定位,快速排错。

PHP函数功能,但是要注意函数只在PHP4.3.0PHP5函数是PHPPHP5函数,然后又反向移植到PHP4.3

microtime()函数来确定当前时间。例如PHP
代码如下:
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文件的分析,我们可以迅速找到程序运行的瓶颈所在,提高程序效率,从而提高整个系统的性能

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐