如何跟踪 Xdebug 请求是否从我的浏览器/docker 容器发送?

How can I track if an Xdebug request is being sent from my browser / docker container?

我有一个 PhpStorm IDE 设置了 Xdebug,一个 docker 容器设置了 Xdebug 并应用了浏览器模块。但是,当我尝试 'pick up the phone' 并刷新环境中包含的代码时,什么也没有得到。

我尝试了各种端口和服务器名称,以及我能找到的教程。我不确定我的 docker 是安全问题还是设置不当,但我相对确定 PhpStorm 设置是正确的。

我试过在 Dockerfile 中公开端口(9000 和 9001)

我的 .php 文件只是 echo 和一些应用了断点的数学:

echo("TEST 1<br>");
$test = 2;
echo("TEST " . $test . "<br>");

$testArray = xdebug_get_code_coverage();
var_dump($testArray);
phpinfo();

dd("TEST 3");

在我的 .env 文件中,定义了以下内容:

PHP_IDE_CONFIG=serverName=jumbledowns-demo
XDEBUG_CONFIG=remote_host=localhost remote_port=9001

我的 Dockerfile 设置了 Xdebug:

RUN pecl install xdebug; \
    docker-php-ext-enable xdebug; \
    echo "error_reporting = E_ALL" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    echo "display_startup_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    echo "display_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini;

浏览器端的 PHPinfo 显示了预期的代码,Xdebug 的设置如下:

xdebug.remote_host  localhost   localhost
xdebug.remote_log   no value    no value
xdebug.remote_mode  req req
xdebug.remote_port  9001    9000

我已经尝试在上面使用 URL 和分配的 IP 地址,并且可以根据需要更改它们。

理想情况下,我希望能够有一个命令行日志或输出显示 Xdebug 正在尝试调用什么以及在哪个端口上。

为了找出 Xdebug 试图做什么,您需要将 xdebug.remote_log 设置设置为非空值,例如 xdebug.remote_log=/tmp/xdebug.log。该文件将包括所有连接尝试,以及建立连接后的通信协议内容。

remote_host=localhost

几乎肯定是不正确的,因为 PHP 和 Xdebug,docker 容器中的 运行 需要打开到此主机的连接,并且 localhost,不会是正确的 hostname/IP 地址。它更有可能是 host.docker.internal 或类似的东西,或者更确切地说,硬编码运行 IDE 的机器的 IP 地址,可以从 docker 容器访问。