【问题标题】:Disable Xdebug 3 "Could not connect" message in CLI在 CLI 中禁用 Xdebug 3“无法连接”消息
【发布时间】:2021-03-20 14:46:20
【问题描述】:

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

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

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

【问题讨论】:

  • 可能是您的 Xdebug 设置。它不会在这里打印这些东西。你的是什么?请显示phpinfo() 的Xdebug 部分或仅显示xdebug_info()
  • P.S.类似的问题(如果有一些更新会在那里发布):stackoverflow.com/q/65162856/783119
  • 我相信它要么是 Xdebug 设置之一,要么是 PHP 本身。如果您可以提供您的phpinfo() / php -i 输出,我可能会与我的输出进行比较......因为当我这样做时我在这里看不到这样的警告(我在 Windows 上......但我怀疑它会产生任何这里的区别)。现在我相信它可能是xdebug.XXX 选项之一.. 或者可能是如何处理error_log(因为这是通常写入此类消息的地方)。
  • 以防万一:xdebug.remote_autostart = yes 是 Xdebug v2 选项,而 Xdebug v3 使用 xdebug.start_with_request = yes 而不是 xdebug.org/docs/upgrade_guide。我已经检查了我能想到的所有选项.. 并且找不到会强制在正常输出中打印此类条目的选项(除了某种 PHP 的错误日志重定向 .. 因为这通常是此类消息所在的位置)。我没有更好的想法(除了可能检查 Xdebug 的错误跟踪器以获取可能的票证),因此 xdebug.log_level = 0 在这里听起来是一个很好的解决方案。
  • 检查stackoverflow.com/a/65264131/783119 -- 正确配置error_log设置。

标签: php xdebug xdebug-3


【解决方案1】:

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

xdebug.log_level = 0

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

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

【讨论】:

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

在我的情况下,问题是 Xdebug 尝试在每个请求上运行,因为我没有在每个页面上进行调试,因此报告了 Xdebug: [Step Debug] Could not connect to debugging client 之类的错误并且是可以理解的。

xdebug.log_level = 0 最明显的解决方案当然有效,但这种方法对我来说太宽泛太盲目了。所以我检查了documentation,我认为消除该错误的最佳方法是告诉Xdebug什么时候应该真正运行,什么时候不应该运行,所以在我的情况下正确的选择是:

xdebug.start_with_request = trigger

如文档所述:

该功能仅在特定触发器被激活时才被激活 请求开始时出现。

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

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

【讨论】:

  • 太棒了!这消除了警告,并没有破坏 VS Code 的 PHP Debug 扩展。
【解决方案3】:

这是你需要的:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    • 2016-10-01
    • 2018-06-03
    • 2014-01-24
    • 1970-01-01
    相关资源
    最近更新 更多