在CLI中禁用Xdebug 3的“无法连接”消息

23

当在CLI中使用Xdebug 3时,如果没有设置断点,它会不断地报告以下信息:

"Xdebug: [Step Debug] Could not connect to debugging client. Tried: localhost:9003 (through xdebug.client_host/xdebug.client_port) :-("

有没有办法在CLI中禁用该消息表单的显示?


2
可能是您的Xdebug设置问题。它在这里不打印这样的内容。您的设置是什么?请展示phpinfo()或者xdebug_info()中的Xdebug部分。 - LazyOne
我确实有xdebug.remote_autostart = yes - 但是,当它无法连接时,我更希望它不显示那个消息。我能不能禁用那个错误消息? - Alexei Rayu
1
我认为这可能是Xdebug设置或PHP本身的问题。如果您可以提供您的phpinfo()/php -i输出,我可以与我的进行比较……因为当我执行相同操作时,我没有看到这样的警告(我在Windows上……但我不认为这会有任何区别)。现在我认为这可能是xdebug.XXX选项之一……或者可能是如何处理error_log(因为通常会将此类消息写入其中)。 - LazyOne
1
请注意:xdebug.remote_autostart = yes 是 Xdebug v2 的选项,而 Xdebug v3 则使用 xdebug.start_with_request = yes。详情请参见 https://xdebug.org/docs/upgrade_guide。我已经检查了所有我能想到的选项,但无法找到强制打印此条目到正常输出的选项(除非某种 PHP 错误日志重定向,因为这是此类消息通常所在的位置)。我没有更好的想法(除了可能检查 Xdebug 的 Bug 跟踪器以获取可能的票据),因此在这里使用 xdebug.log_level = 0 看起来是一个不错的解决方案。 - LazyOne
1
请查看 https://dev59.com/N-k5XIcBkEYKwwoY2NTu#65264131 -- 适当配置 error_log 设置。 - LazyOne
显示剩余2条评论
7个回答

31

不幸的是,禁用此错误的唯一方法是在xdebug.ini中通常禁用所有错误和警告:

xdebug.log_level = 0

希望在未来的xdebug版本中有其他方法(在我看来,这应该只是一个轻微的警告)。

编辑:正如LazyOne所提到的,还可以在php.ini中为error_log设置一个值,例如/var/log/php_error.log。通过这种更改,日志条目将写入此文件而不是发送到stderr。


2
Xdebug 应该将这样的文本写入 PHP 错误日志... 在 Windows 10 上它确实这样做了(PHP 7.4 和 8.0 -- NTS 构建,x64)。当我在终端上进行测试时,我没有看到这样的警告 -- 它按照应有的方式进入日志文件中(使用默认的 xdebug.log_level 值,即 7)。也许是一些输出重定向(错误输出流或类似的东西)。 - LazyOne
2
在Ubuntu上使用默认的xdebug.log_level并且没有列出PHP调试连接时,使用echo "<?php" | php命令,我得到了以下信息:"Xdebug: [Step Debug] Could not connect to debugging client. Tried: localhost:9003 (through xdebug.client_host/xdebug.client_port) :-(" - Herbert Scheffknecht
3
@haby error_log PHP设置的价值是什么(例如,从phpinfo()输出或仅使用ini_get('error_log');)。我相信它将是空的(或者可能是一些错误的位置)。如果您将其设置为某个适当的位置(例如,类似于“/var/log/php_error.log”或甚至是“/dev/null”,这取决于您的操作系统和发行版),那么您应该不会在第一次看到这样的错误。你可以这样做并检查你在这里的第一条评论中所做的相同的事情吗? - LazyOne
3
没错,它是空的。将它设置为建议的文件名并设置正确的权限,错误消息就会消失。我在xdebug2中没有遇到这样的行为,但无论如何感谢你。 - Herbert Scheffknecht
2
@haby:“我在xdebug2中没有这样的行为。” 当Xdebug 3发现您仍在使用v2参数时,它也会使用相同的方式通知您。 这是有意为之的,以使用户意识到“可能出了些问题,您可能需要查看一下”。 - LazyOne
显示剩余5条评论

11
在我的情况下,问题是Xdebug尝试在每个请求上运行,由于我没有在每个页面刷新上进行调试,因此报告了错误,例如Xdebug:[Step Debug] Could not connect to debugging client,这是可以理解的。
当然,最明显的解决方案是使用xdebug.log_level = 0,但对我来说,这种方法太过笼统和盲目。因此,我查看了文档,我认为摆脱该错误的最佳方法是告诉Xdebug何时应该真正运行以及何时不运行,因此在我的情况下,正确的选项是: xdebug.start_with_request = trigger 如文档所述:

只有在请求开始时存在特定的触发器时才会激活功能。

触发器的名称为XDEBUG_TRIGGER,Xdebug检查其是否存在于$_ENV(环境变量)、$_GET或$_POST变量或$_COOKIE(HTTP cookie名称)中。

我建议至少查看他们的文档的那一部分,因为那里有更多信息,如果需要,您甚至可以进行更精细的调整。


非常好!这样可以摆脱警告,并且不会影响VS Code的PHP调试扩展。 - August Janse
这对我解决了问题 - Xdebug警告导致CLI上的PHPUnit测试失败。 - joachim
很棒的答案:+50 - undefined

6

从3.1版本开始,如果您设置了日志文件的路径,xdebug将不再将其日志重定向到php日志中。在我的情况下,我使用以下设置,这些消息不再在控制台上刺眼。

xdebug.log=/var/www/var/log/xdebug.log
xdebug.log_level=3

此问题的公关请求:https://github.com/xdebug/xdebug/pull/738


0
如果您只需要在一次调用中抑制输出,可以使用以下方法 - 例如显示版本: XDEBUG_CONFIG="log_level=0" composer -v

0
如果您正在运行一个PHP脚本或命令,您可以使用-d选项来设置INI条目。
php -d xdebug.log_level=0 your_sript.php

0
将php.ini中的'xdebug.start_with_request'从'yes'更改为'trigger'解决了我的问题,我使用MAMP。
xdebug.start_with_request = trigger

-4

这就是你需要的:

xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.discover_client_host=1

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