为什么 Xdebug 3 profiler 在 CLI 中触发而不在 Apache 中触发?

分享于2022年07月17日 php xdebug xdebug-3 xdebug-profiler 问答
【问题标题】:为什么 Xdebug 3 profiler 在 CLI 中触发而不在 Apache 中触发?(Why Xdebug 3 profiler triggers in CLI but not in Apache?)
【发布时间】:2022-06-20 18:05:27
【问题描述】:

我可以触发 PHP 调试会话(用于 CLI 和 Apache),但在尝试分析时,它仅在 CLI 模式下而不是在 Apache2 下工作。

这是我的 Xdebug 配置(xdebug.ini):

zend_extension=xdebug.so

xdebug.remote_handler=dbgp;
xdebug.mode=debug,profile;
xdebug.start_with_request=yes
xdebug.client_host=127.0.0.1;
xdebug.client_port=9003;
xdebug.discover_client_host = 1;
#xdebug.log_level=0;

#problems about xdebug profile itself
xdebug.log="/tmp/xdebugprofile/xdebug.log"

xdebug.output_dir = "/tmp/xdebugprofile";
xdebug.profiler_output_name = "cachegrind.out.%u.%H_%R";

知道这种不一致的行为吗?

(Linux Mint 20、PHP 8.0、Apache2)

  • 显示通过 Apache 捕获的整个 xdebug_info(); 输出。也许有些更改没有在那里应用?也许 Apache 进程没有足够的权限写入该文件夹? (但如果它在那里生成 Xdebug 日志,那么它应该不是问题)。我现在没有其他想法。附言 xdebug.remote_handler=dbgp; -- 那是 Xdebug v2,即使在那里它也不会做任何事情。

【解决方案1】:

我遇到了同样的问题。解决方案如下:

在服务单元文件中,变量 PrivateTmp 设置为 true:

 PrivateTmp=true

我将上面设置为false,然后重新启动php-fpm

文件的可能位置:

/usr/lib/systemd/system/php-fpm.service

/usr/lib/systemd/system/php72-php-fpm.service

你可能会发现它使用:

sudo find /usr/ -name php-fpm.service

现在 cachegrind 文件是在 /tmp 中创建的

解决方案取自: xdebug only profile php process not php-fpm process