Ubuntu14.10下安装配置Xdebug+kcachegrind实现远程调试

一: 安装xdebug,这里用pecl

1
2
3
sudo apt-get install php-pear
sudo apt-get install php5-dev
sudo pecl install xdebug

二: 配置xdebug

1
2
cd /etc/php5/apache2/
sudo vim php.ini

在php.ini 中加入

1
2
[php_xdebug]
zend_extension = "/usr/lib/php5/20090626/xdebug.so"

find / -name xdebug.so

执行以上命令后会提示你的xdebug.so的所在目录。

此外,还需在使用xdebug之前,在php.ini中指定几个xdebug特定属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
xdebug.profiler_enable=1
xdebug.profiler_enable_trigger=1
xdebug.profiler_output_dir="/tmp/xdebug"
xdebug.profiler_append=on
;xdebug.profiler_output_name = "cachegrind"
xdebug.default_enable=on
;开启自动跟踪
xdebug.auto_trace=on
;开启异常跟踪
xdebug.show_exception_trace=on
;开启远程调试自动启动
xdebug.remote_autostart = off
;收集参数
xdebug.collect_params=on
;收集返回值
xdebug.collect_return=on
;收集变量
xdebug.collect_vars = on
xdebug.max_nesting_level=100
;开启远程调试
xdebug.remote_enable=on
;允许连接的zend studio的IP地址
xdebug.remote_host=localhost
;反向连接zend studio使用的端口
xdebug.remote_port=9999
;用于zend studio远程调试的应用层通信协议
xdebug.remote_handler=dbgp
;如果设得太小,函数中有递归调用自身次数太多时会报超过最大嵌套数错
xdebugbug.max_nesting_level = 10000

注意在xdebug.profiler_output_dir = “/var/log/xdebug”随后需要创建文件夹

1
2
3
cd /var/log
mkdir xdebug
chmod 777 xdebug -R

然后将PHP配置文件的html_errors开启,将错误提示清晰化显示,默认为Off

1
html_errors = Off

改为

1
html_errors = On

参数说明:
xdebug.profiler_enable

#开启(1)或关闭(0)性能分析工具
xdebug.profiler_output_dir=”/var/log/xdebug”

#设定效能监测信息输出文件的路径,默认路径为/tmp
xdebug.profiler_output_name

#所用的文件名称
xdebug.profiler_append

#对php脚本发出新请求时,覆盖文件(1),默认情况下此设置为关(0)
xdebug.profiler_enable_trigger

#允许性能分析工具开始使用一个GET/POST 或 COOKIE变量:XDEBUG_PROFIKE。xdebug.profiler_enable必须设置为0

具体的配置可以参考:http://xdebug.org/docs/all_settings
注意:输出目录要预先建好,否则不会输出内容。
重启web服务器(或php-fpm)后,在phpinfo中查看是否有xdebug的信息,有的话就成功了。

xdebug

三.安装kcachegrind

1
sudo apt-get install kcachegrind

至此,你就可以用kcachegrind,webgrind 来分析你的PHP代码了。

 

四. 接著只要执行网页就会在 /tmp/xdebug 下产生 cachegrind.out.xxxxx

注意:要i测试时,要让其它人都不要执行,否则很难知道那个cachegrind.out 是你要的。

 

五. 接著把 cachegrind.out 文档抓回來,使用 KCachegrind 來查看结果。

載入 cachegrind.out.xxxxx

6

就可以看到如下图般详细的资讯,由其是 Call Graph 的資訊,真是超詳細的。
7

PS. 记得上线后要把 php.ini 里的 Xdebug Mark 起來,不然上线会变很慢。

 

 

 

 

更好的设定:

1
2
3
4
5
xdebug.profiler_append=0
xdebug.profiler_enable=0
xdebug.profiler_enable_trigger=1
xdebug.profiler_output_dir="/Users/yang/public_html/xdebug_grind"
xdebug.profiler_output_name=callgrind.%R

 

当然profiler_output_dir用你自己的, profiler_output_name的前缀也可以改成你想要的,我用callgrind是因为我的这个读 grind 的软件默认读这个文件名

这个%R 就是URL 路径,这样生成的文件是我附件里这个名字格式的.还有好几种可以用的变量http://xdebug.org/docs/all_settings#trace_output_name

然后 enable 为0的话,就不会每次刷新页面都生成文件了,就不会那么慢了,要想要页面生成文件,在页面链接里跟上 ?XDEBUG_PROFILE 就行了,比如

http://test.zou.com/index.php/vaatteet.html 这个页面正常打开就不会生成文件

http://test.zou.com/index.php/vaatteet.html?XDEBUG_PROFILE 这样就会生成文件了

坚持原创技术分享,您的支持将鼓励我继续创作!