首页 > 解决方案 > Xdebug 一个应用程序触发来自其他应用程序的调试连接?

问题描述

我的机器上有两个独立的 Laravel 8 应用程序。我在设置中.env设置并使用标志SAIL_XDEBUG_MODE=develop,debug构建容器。no-cache

在此处输入图像描述

这些是我的 PHP/DEBUG 条目:

SAIL_XDEBUG_MODE=开发、调试

“PHP | 服务器”中没有条目。

这是我无法对自己解释的最奇怪的事情:

一个容器正在侦听端口 localhost:89(文件夹app-a),另一个容器正在侦听 localhost:8083(文件夹app-b)。

当我使用 PhpStorm 打开项目文件夹app-a并在 index.php 处设置断点并启用侦听调试连接时,当我打开 localhost:89 时没有任何反应。但是,当我打开 localhost:8083 时,调试突然开始了?为什么一个应用程序会触发我的另一个应用程序的调试?

app-b当我使用 PhpStorm打开文件夹时,只有 localhost:8083 才会触发调试启动(如预期的那样)。

任何想法这是怎么可能的?对于浏览器,我使用带有 Xdebug 扩展的 Chrome。

标签: laravelphpstormxdebug

解决方案


app-b导致调试的问题app-a是因为我Ignore external connections through unregistered server configurations禁用了。启用此选项可防止这种情况发生。

没有初始化调试会话的原因localhost:89是因为我的 Laravel 设置。我最初使用的是旧版本的 Laravel 8(虽然我更新到最新版本,但 docker-compose 文件是从旧版本的 Sai 复制而来的)。特别是,我缺少以下条目:

 environment:
     WWWUSER: '${WWWUSER}'
     LARAVEL_SAIL: 1
     XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
     XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-  client_host=host.docker.internal}'
extra_hosts:
     - 'host.docker.internal:host-gateway'

添加这些条目以及浏览器中的调试插件使调试工作。


推荐阅读