PHP中的XDebug性能分析 - 无法获取输出

14

我遇到了一个奇怪的问题。 我已经设置好了XDebug来对我们正在开发的PHP应用程序进行分析。 我相信一切都设置正确,但运行时没有任何输出。我的配置如下:

zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so
[XDebug]
xdebug.profiler_append = 1
xdebug.profiler_enable = 0 (I've tried this both on and off)
xdebug.profiler_enable_trigger = 1
xdebug.profiler_output_dir = "/debug/xdebug/profiler_output_dir"
xdebug.profiler_output_name = "cachegrind.out.%p"

所有phpinfo()函数的设置都是正确的。输出目录的权限目前设置为777,只是为了测试。我也尝试使用public_html目录下的一个目录,但没有成功。我用来启动分析器的URL是:

http://example.com/my_page.php?XDEBUG_PROFILE
-or-
http://example.com/my_page.php?XDEBUG_PROFILE=1

两种方法都不起作用。非常感谢您的帮助!该应用程序的页面加载时间为5-6秒,我无法通过代码跟踪它。

5个回答

18

在某些发行版上,/tmp文件夹也存在问题。我在CentOS 7上无法获取输出,然后我找到了这个

因此,我设置了

xdebug.profiler_output_dir = /home/jirka/profile

chmod 777 /home/jirka/profile现在可以了。


3
关于PrivateTmp设置,这里有更多的信息链接。它“为执行的进程设置一个新的文件系统命名空间,并在其中挂载一个私有的/tmp目录,该目录不被命名空间外的进程共享。这意味着具有此标志的进程将看到与其他用户和守护程序看到或可以访问的不同和唯一的/tmp”。 - TachyonVortex
谢谢。事实证明,我的OpenSUSE 13.1具有相同的配置,将分析器输出移动到其他位置解决了问题。 - savedario

11

xdebug.profiler_output_dirxdebug.profiler_output_name注释掉,然后尝试查找输出文件是否在/tmp/下。


3
Hamid,结果证明你是在正确的轨道上。我忘记把输出目录的完整路径放进去了。以下是最终解决方案: xdebug.profiler_append=1 xdebug.profiler_output_dir ="/home/username/debug/xdebug/profiler_output_dir" xdebug.profiler_output_name = "cachegrind.out.%s.%H" - John Swaringen
非常感谢 @HamidNazari。你救了我的一天 :) - mohit_rocks

6

此问题的另一个可能原因是profiler_output_dir文件夹的权限。

为组和所有者添加写入权限可以解决我的问题:

sudo chmod go+w /home/dimitris/cachegrind/

1
此外,还要注意访问限制,例如访问权限、组、所有者和SElinux...

确实。由于权限问题,Apache无法将文件写入已定义的用户目录,我遇到了同样的问题。 - Artjom Kurapov

1

需要提供完整路径,而不仅仅是路径:

xdebug.profiler_append=1
xdebug.profiler_output_dir ="/home/username/debug/xdebug/profiler_output_dir"
xdebug.profiler_output_name = "cachegrind.out.%s.%H"

注意:这是原帖作者在他们的问题中提供的解决方案。 - k0pernikus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接