2009-08-14 45 views
0

我的问题是基于this article在Ubuntu调试PHP时使用Xdebug2的性能分析数据

如何通过Xdubug2制作关于PHP代码的分析数据,然后将其放入应用程序(如KCacheGrind)?

我在Ubuntu中成功使用了Xdebug,因为它在浏览器中突出显示了我的错误消息。但是,我还没有找到像xdebug这样的终端工具。

我想有我的PHP代码这样

alt text

+1

了解他们的图片似乎没有得到转移过来。如果您可以重新发布可能有帮助的图片。 – 2009-08-19 19:47:55

+0

我是参考文章的作者。该图像被链接到我的服务器,我已配置Apache不允许。 因此,我已经将图像上传到imgur.com,在那里可以容忍甚至鼓励盗链。 – pilif 2009-08-28 08:25:49

回答

4

此行添加到你的php.ini

xdebug.profiler_enable = 1

然后,如果你碰巧经过,你需要重新启动Web服务器Web服务器运行PHP,否则的conf变化不挑向上。

如果您通过cli运行PHP,那么当然不需要重新启动。

现在,当您运行PHP脚本时,会在xdebug.profiler_output_dir php.ini设置指定的目录中创建cachegrind.out.PID文件。它默认是/ tmp。

该文件是kcachegrind能够加载的文件之一。

还有其他的手段来调用这个文件产生,你可以在http://www.xdebug.org/docs/all_settings#profiler_enable

1

我遇到类似的情况,我只有访问到终端,而不是在其上进行测试的视觉环境。更糟糕的是,我使用的是Windows机器和Putty。

提供的解决方案是

  1. 安装WebGrind(http://code.google.com/p/webgrind/
  2. 运行的Xdebug和cachegrind.out文件复制到那里你有cachegrind观众的机器。

对我来说,答案是SCP把cachegrind文件放到本地windows机器上,然后用WinCachegrind来查看它们。你可以将它们SCP到你的Linux机器上,并在这些文件上运行KCacheGrind。这个缺点是,你可能没有相同的文件结构,所以你将无法查看源代码。如果您的本地计算机上也有源代码,或者可以在此获得源代码,那么也可以修复此问题。在vim(或其他编辑器)中打开cachegrind文件,然后执行全局搜索并替换路径,以将它们更改为本地计算机上的正确源路径。

我希望这是你正在寻找的。

编辑到地址评论:

如果你正在得到callgrind文件有所不同。为此,您需要在Linux中运行(我认为您是这样)并且可以使用callgrind和valgrind程序。这里假设的最后一件事是,您将Apache作为Apache mod运行,而不是以其他方式运行。针对apache的启动使用callgrind工具,然后在浏览器中运行请求。这不仅会给你详细的信息,而且还会给你提供有关Apache调用树中的许多信息,这些信息可能会造成麻烦。

这里的

sudo callgrind --dump-instr=yes --trace-jump=yes -v /usr/sbin/httpd -X 

一个例子,-X将开始在调试模式下的Apache只有一个线程。从这里打开一个Web浏览器,并打你想要的PHP脚本。然后回去关闭apache。这也应该结束callgrind解析。

如果您不需要Apache或Web浏览器,你可以尝试只用PHP命令

sudo callgrind --dump-instr=yes --trace-jump=yes -v /usr/sbin/php my_php_script.php 

这应该给你相同的结果,但没有所有的东西阿帕奇运行callgrind。

+0

我得到了WebGrind的工作。 PHP是一种不需要编译的语言。 **如果你不想使用'gcc -pg',那么你如何创建一个PHP脚本的callgrind.out文件?** – 2009-08-19 12:40:44

+1

如果你想获得一个callgrind而不是一个不同的cachegrind。回复修改意见。 – 2009-08-19 19:38:42

+1

Masi,Callgrind是valgrind的选项。对困惑感到抱歉。在我的机器上,callgrind安装使“callgrind”作为一个只是“valgrind --tool = callgrind”别名的命令可用。试试这个sudo valgrind --tool = callgrind --dump-instr = yes --trace -jump = yes -v/usr/sbin/php my_php_script.php – 2009-08-23 04:28:54