2

假设我有两个微服务在两个不同的 Docker 容器中运行:ServiceAServiceB. ServiceA发出一个 HTTP 请求ServiceB,这个请求返回一个响应。如果可能的话,我希望能够在(PhpStorm 的实例)中启动我的调试会话,并在发送呼叫后将其ServiceA切换到ServiceB(PhpStorm 的实例),然后返回到ServiceA. 需要明确的是,我将打开两个 PhpStorm 窗口:一个ServiceA用于ServiceB.

以下是我当前配置的一些注意事项:

  • 服务A:PHP 7.4.x,Xdebug 3.0.4
  • 服务 B:PHP 7.2.x,Xdebug 3.0.4

ServiceA和的 Xdebug 设置相同ServiceB

zend_extension=xdebug.so
xdebug.mode=debug
xdebug.discover_client_host=true

根据File | Settings | PHP | DebugPhpStorm 中的配置,它们如下所示,对于 and 是相同ServiceAServiceB

在此处输入图像描述

由于ServiceB应该正在侦听传入连接,因此那个绿色的小虫子工具栏看起来像这样:

在此处输入图像描述

我有什么问题?

  • 我能够开始调试会话,ServiceA但它永远不会切换到ServiceB,会话正确完成。
  • 以下“警告”垃圾邮件我的stdout日志ServiceB

Xdebug:[Step Debug] 无法连接到调试客户端。已尝试:172.18.0.9:9003(来自 REMOTE_ADDR HTTP 标头),localhost:9003(通过 xdebug.client_host/xdebug.client_port 回退)

我可能在这里遗漏了什么?

注意:如果需要更多信息,请询问我,我会添加

4

1 回答 1

0

该选项xdebug.start_with_request = yes告诉 Xdebug 尝试调试每个请求/脚本。如果 Xdebug 无法连接到调试客户端(它从xdebug.client_host和获取值xdebug.client_port),那么它会通知您。

通常这样的消息将被写入标准 PHP 的错误日志。看起来您根本没有在 php.ini 中配置它(因为这是默认情况下的配置),因此 PHP 将其发送到您的标准输出。

如果你想阻止它出现在你的终端输出中,你必须将 PHP error_log 指向一个有效的位置。

在我的案例中我如何解决它的示例:

1-编辑您的ini文件:

sudo vi /etc/php/7.4/cli/php.ini

2-并添加这一行:

error_log = /var/www/log/php_error.log

注意:将之前的路由更改为您想要的任何有效目录。

3-再试一次,警告应该消失,现在进入日志文件。

于 2021-08-16T11:16:29.727 回答