在Ubuntu中调试PHP时使用Xdebug2的分析数据

时间:2009-08-14 17:23:47

标签: php ubuntu xdebug kcachegrind

我的问题基于this article

如何通过Xdubug2制作有关PHP代码的分析数据,然后将其放到像KCacheGrind这样的应用程序中?

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

我希望能够直观地看到我的PHP代码

alt text

3 个答案:

答案 0 :(得分:4)

将此行添加到php.ini

xdebug.profiler_enable = 1

然后,如果您碰巧通过网络服务器运行PHP,则需要重新启动网络服务器,否则不会更改配置更改。

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

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

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

还有其他方法可以调用此配置文件生成,您可以在http://www.xdebug.org/docs/all_settings#profiler_enable

上阅读它们

答案 1 :(得分:3)

答案 2 :(得分:1)

我遇到了类似的情况,我只能访问终端,而不是可以测试的可视环境。更糟糕的是,我使用的是Windows机器和Putty。

可用的解决方案

  1. 安装WebGrind(http://code.google.com/p/webgrind/
  2. 运行Xdebug并将cachegrind.out文件复制到您拥有cachegrind查看器的计算机上。
  3. 对我来说,答案是SCP将cachegrind文件存储到我的本地Windows机器上,并使用WinCachegrind查看它们。您可以将它们放入您的Linux机器上并在文件上运行KCacheGrind。这样做的缺点是,您可能没有相同的文件结构,因此您将无法查看源代码。如果您的本地计算机上也有源,或者可以在那里获得源,您也可以解决此问题。在vim(或其他编辑器)中打开cachegrind文件并进行全局搜索并替换路径,将它们更改为本地计算机上的正确源路径。

    我希望这就是你要找的东西。

    编辑以发表评论:

    如果您正在努力获得一个稍微不同的callgrind文件。为此,您需要在Linux中运行(我认为您是这样)并且可以使用callgrind和valgrind程序。这里假设的最后一件事是你将PHP作为Apache mod运行而不是以其他方式运行。使用callgrind工具来启动apache,然后在浏览器中运行请求。这将不仅为您提供有关php调用树的详细信息,还将为您提供可能导致问题的Apache中的许多信息。

    这是

    的一个例子
    sudo callgrind --dump-instr=yes --trace-jump=yes -v /usr/sbin/httpd -X
    

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

    如果您不需要apache或Web浏览器,可以尝试使用php命令运行callgrind

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

    这应该会给你相同的结果,但没有所有的apache东西。