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

Ale*_*ayu 15 php xdebug xdebug-3

在 CLI 中使用 Xdebug 3 时,它会在没有设置断点时不断报告消息:

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

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

hab*_*aby 16

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

xdebug.log_level = 0
Run Code Online (Sandbox Code Playgroud)

希望在未来的 xdebug 版本中还有其他方式(恕我直言,这应该只是一个弱警告)。

  • Xdebug 应该将此类文本写入 PHP 错误日志...并且它在 Windows 10 上执行此操作(PHP 7.4 和 8.0 - NTS 版本,x64)。在终端中进行测试时,我没有看到这样的警告——它按应有的方式到达日志文件(使用默认的“xdebug.log_level”值,即“7”)。也许是一些输出重定向(错误输出流或类似的)。 (2认同)
  • 与 `echo "<?php" | 在 Ubuntu 上使用默认 xdebug.log_level 的 php` 且未列出 PHP 调试连接时,我收到以下消息:“Xdebug: [Step Debug] 无法连接到调试客户端。尝试过:localhost:9003(通过 xdebug.client_host/xdebug.client_port ) :-(" (2认同)
  • @haby `error_log` PHP 设置的值是多少。(例如来自 phpinfo(); 输出或只是 ini_get('error_log');)。我相信它将是空的(或者可能是一些不正确的位置)。如果您将其设置到某个正确的位置(例如“/var/log/php_error.log”或什至“/dev/null”之类的位置 - -取决于您的操作系统和发行版),那么您不应该在第一时间看到这样的错误地方。您可以这样做并检查您在此处的第一条评论中所做的相同操作吗? (2认同)
  • 你说得对,是空的。将其设置为建议的文件名并设置正确的权限,错误消息消失。我对 xdebug2 没有这种行为,但无论如何还是谢谢。 (2认同)
  • @haby *“我在 xdebug2 中没有这样的行为”* 当 Xdebug 3 发现您仍在使用 v2 参数时,它也会使用相同的方式通知您。这样做的目的是让用户意识到“可能出了问题,您可能需要调查一下”。 (2认同)

Pic*_*ard 12

就我而言,问题是 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 名称)中是否存在该触发器。

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


Ант*_*лёв 6

从 3.1 版本开始,如果您设置日志文件的路径,xdebug 不会将其日志重定向到 php 日志。就我而言,我使用以下设置,这些消息不再在控制台中让人眼花缭乱

xdebug.log=/var/www/var/log/xdebug.log
xdebug.log_level=3
Run Code Online (Sandbox Code Playgroud)

此问题的PR: https: //github.com/xdebug/xdebug/pull/738