使用XDebug分析php程序,分析程序性能瓶颈,利用eclipse对php进行debug调试

本文主要针对XDebug进行讲解,相信很多同学对这个并不陌生,而且也听说过另一个zenddebug,这个是针对php进行分析和调试的一个很好的工具,之前我们讲过accelerator和zen guard loader,其实这个XDebug也不错,我们可以安装一下试试,因为很多时候一个应用程序的瓶颈是因为程序码的问题,也许只有很少的程序码有问题,但是对于一个大项目来说,仅凭你的手工查找调试,我想还是有些繁琐和难以应对的,这时候我们可以利用这个小工具了,首先我们来讲解如何安装XDebug。
1、执行一个phpinfo的页面,打印出php的相关信息,然后ctrl+A全选这些信息复制到这里来http://xdebug.org/wizard.php,单击这个按钮Analyse my phpinfo() output,接下来你会看到一个分析结果页面,按照这个页面的操作指南一步一步操作即可。当然这里也许会有一个问题就是需要使用phpize。很多使用yum、rpm以及二进制包等非编译方式安装的php都没有这个东东,那么我们可以这样来安装phpize[shell]
yum install php-devel[/shell]
好了,这样便安装好了,你的安装路径可以使用whereis phpize来查看一下,一般就会安装在/usr/bin/phpize,当然这个命令不是在任何目录下都可以执行,不行你可以在任意目录下执行一下可能会报出这样错误[shell]
Make sure that you run /usr/local/bin/phpize in the top level source directory of the module。[/shell]
这个东西是干嘛用的呢,phpize 是属于 php-devel 中的东西,主要是设定 php 外挂模块的一些设定。
比如你想在原来编译好的php中加入memcached或者ImageMagick等扩展模块,可以使用phpize,通过以下几步工作。
当php编译完成后,php的bin目录下会有phpize这个脚本文件。在编译你要添加的扩展模块之前,执行以下phpize就可以了。
比如现在想在php中加入memcache扩展模块:我们要做的只是如下几步。[shell]
tar zxvf memcache-x.x.x.tgz
cd memcache-x.x.x/
/usr/local/php/bin/phpize
./configure –with-php-config=/usr/local/php/bin/php-config
make
make install[/shell]
————————————————————————
注意./configure 后面可以指定的是php-config文件的路径
这样编译就完成了,还需要做的是在php.ini文件中加入extension值
extension = “memcache.so”
2、安装好了之后我们开始使用phpize为php安装这个XDebug这个模块,当然你按照第一步的分析页面的操作步骤一步步来就没问题了,之后重启服务器后打开phpinfo的页面就会看到XDebug的信息了。这时候我们需要简单配置一下php.ini文件,在其中加入如下的信息:
#这条信息因你的php安装路径不同而不同,这一句根据第一步的分析页面操作步骤所告知的为准[shell]
zend_extension = /usr/lib/php/modules/xdebug.so
#上一句有时候也可以写成 "extension=xdebug.so",具体根据安装提示来做。
xdebug.profiler_enable=on
xdebug.trace_output_dir="/tmp/xdebug"
xdebug.profiler_output_dir="/tmp/xdebug"
xdebug.remote_port = 9000
xdebug.remote_handler = dbgp
;开启自动跟踪
xdebug.auto_trace = on
;开启异常跟踪
xdebug.show_exception_trace = on
;开启远程调试自动启动
xdebug.remote_autostart = on
;开启远程调试
xdebug.remote_enable = on
;收集变量
xdebug.collect_vars = on
;收集返回值
xdebug.collect_return = on[/shell]
其中第三四行目的就在于把执行情况的分析文件写入到/tmp/xdebug目录中去(你可以替换成任何你想设定的目录)。如果你执行某段程序后,再打开相应的目录,可以发现生成了一堆文件,例如cachegrind.out.8112这种格式命名的文件。这些就是Xdebug生成的分析文件。用编辑器打开你可以看到很多程序运行的相关细节信息,不过很显然这样看太累了,我们需要用图形化的软件来查看。
在Windows平台下,可以用WinCacheGrind(http://sourceforge.net/projects/wincachegrind/)这个软件来打开这些文件。可以直观看到相关函数以及文件执行的次数以及执行时间,我们便可以有针对性的对程序进行优化了,这个工具很不错,可以将相关文件导入仔细查看找出程序的瓶颈所在。

那么对于XDebug我们可以使用eclipse来进行debug调试,相信编写java的同学都会知道java本身在eclipse下调试很方便,php的运行时则没有java这么方便,当然我们通过一些echo、print等都是可以来调试的,但是debug更方便一些,看个人习惯吧。下面讲一下eclipse的配置:
我用的是Eclipse kepler,其他的版本类似。首先在Window -> Preferences 窗口的左边选择PHP -> Debug(如下图),在窗口右边的PHP Debugger这一项中选择XDebug,这个选项的右边有个Configure链接,点进去可以对XDebug进行设置,请确保XDebug使用的端口号与php.ini文件中指定的相同(通常为9000),下面两项为设置web服务器以及php解释程序,再下面的Break at first line表示调试开始后在第1行断开:

设置好之后便可对程序进行调试了,点击工具上的虫子 -> Debug As,这里可以选择以web页面的形式或是PHP脚本的形式进行调试(如下图):

顺利的话当前工作区视图会切换为PHP Debug,然后程序会在第1行断开,接着就可以进行单步调试了(如下图),调试的方法就不多说了,自己摸索,总之很是方便:

当然,可以通过RSE来进行远程调试。

Avatar photo

About Blackford

这是个最好的时代,这是个最坏的时代,这是个充满希望的春天,这是个令人绝望的冬天,我们前面什么都有,我们前面什么都没有。梦想,让我们一次次的走远,又一次次的回头,一个关于人生的梦想还在不断奔跑,带着喜悦和疼痛,不过一切才刚刚开始,并且直到今天也远远没有结束
This entry was posted in 架构运维 and tagged , , . Bookmark the permalink.

发表评论

电子邮件地址不会被公开。 必填项已用*标注