Linux下Xdebug的编译安装及使用方法

本次记录的是Linux平台下Xdebug的编译安装方法,Windows平台的安装较简单就不赘述了。此处Linux平台以web服务常用OS的Centos6.0为例(其他版本基本一致,其他发行版根据OS的特性流程类似)。

首先下载Xdebug源代码,截至今日最新发布版本为Xdebug_2.2.1。源代码的编译需要使用到gcc、autoconfig、automake和make等工具,所以先确保一下这些工具已经安装。前面提到了Xdebug是以PHP模块的形式加载和被使用,那么我们应该把它安装为PHP的模块,怎么安装为PHP的模块呢,当然是使用phpize了,没有安装phpize的可以扩展php-devel模块。下面我们开始编译(代码中得php-config路径根据PHP环境的实际路径做调整,phpize也是),编译的步骤如下:


linux下解压xdebug包。
1、进入xdebug,在这个目录下先运行php目录下面的bin/phpize;
2、在运行
./configure –enable-xdebug –with-php-config=/你php的bin路径/php-config;
3、make
好了,结束了。这是时候会在xdebug的目录下生成 目录modules,目录下有xdebug.so文件,把xdebug.so复制到你想放的目录。
4、在php的配置文件后面加上
zend_extension = “/路径/xdebug.so”
也不一定是zend_extension,也可能是zend_extension_ts,或者zend_extension_debug。
5、重启下,看phpinfo();(或者 命令行里 ./php -m |grep debug)
有结果就成了.

编译成功的话在xdebug的源码目录下会生成modules/xdebug.so文件,我们把这个xdebug.so文件copy到PHP的扩展模块目录下(默认路径是/usr/lib/php/modules/),再到php.ini中添加xdebug.so模块的相关配置然后重启下httpd。

在php.ini 里加入

extension=xdebug.so
zend_extension=”/usr/lib/php/modules/xdebug.so”
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_port=9000
xdebug.remote_host=127.0.0.1
xdebug.remote_log=/var/log/xdebug.log

[Xdebug]
extension=xdebug.so
xdebug.auto_trace=0
xdebug.collect_params=4
xdebug.collect_return=on

  一切正常的话这个时候xdebug已经能使用了,我们可以使用“php -m”命令来查看php模块的加载情况来确定xdebug是否被正常加载,很奇怪的是我们看到了xdebug得身影还看到了一个告警信息“PHP Warning: Xdebug MUST be loaded as a Zend extension in Unknown on line 0”,意思是Xdebug必须使用Zend扩展方式加载,这是因为我们没有安装Zend Optimzer,但这并不影响xdebug的正常运行以及我们对PHP的跟踪。
  xdebug的collect_params可配置值为1-4的数字,数值越高跟踪记录的信息越多,而collect_return设置为on便可以记录方法的具体返回值,auto_trace是自动跟踪,xdebug消耗较大一般不开启(曾经一次开启了自动跟踪,安装wordpress的中文版总是超时不成功),我们可以在需要被跟踪的代码中启动跟踪,方法如下:

/**
 * 可以新建一个php文件,需要跟踪的php页面包含该页面即可
 */
define('XDEBUG_TRACE_FILE', '/tmp/' . date('mdHis') . '.' . rand()); // 一般不用改
// reg stop trace
register_shutdown_function('xdebug_stop_trace');
// start trace
xdebug_start_trace(XDEBUG_TRACE_FILE);

如何利用Xdebug测试脚本执行时间

测试某段脚本的执行时间,通常我们都需要用到microtime()函数来确定当前时间。例如PHP手册上的例子:


但是microtime()返回的值是微秒数及绝对时间戳(例如“0.03520000 1153122275”),没有可读性。所以如上程序,我们需要另外写一个函数microtime_float(),来将两者相加。
Xdebug自带了一个函数xdebug_time_index()来显示时间。
如何测定脚本占用的内存?
有时候我们想知道程序执行到某个特定阶段时到底占用了多大内存,为此PHP提供了函数memory_get_usage()。这个函数只有当PHP编译时使用了–enable-memory-limit参数时才有效。 
Xdebug同样提供了一个函数xdebug_memory_usage()来实现这样的功能,另外xdebug还提供了一个xdebug_peak_memory_usage()函数来查看内存占用的峰值。

发表评论

返回顶部