Visual Studio 代码 PHP 调试不会在 Docker 项目的断点处停止

Visual Studio Code PHP Debug does not stop on breakpoints for Docker project

我无法让 VS Code 扩展 "Php debug" 在任何断点处停止。我是 运行 我 Ubuntu 笔记本电脑上 Docker 的 php 项目(我想调试)。非常感谢任何建议。

我的设置:

我的 VS Code launch.json 文件是:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9000,
            "log": true,
            "pathMappings": {
                "/var/www/html": "/home/chris/my-test-debugging-project"
            }
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9000
        }
    ]
}

我的/usr/local/etc/php/conf.d/xdebug.ini配置是:

zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_host=172.17.0.2
xdebug.remote_log=/var/www/html/xdebug.log
xdebug.remote_connect_back=0
xdebug.remote_port=9000

XDebug 日志文件(来自 php.ini 中的设置 xdebug.remote_log):

    Log opened at 2018-10-14 05:47:16
    I: Connecting to configured address/port: 172.17.0.2:9000.
    W: Creating socket for '172.17.0.2:9000', poll success, but error: Operation now in progress (29).
    E: Could not connect to client. :-(
    Log closed at 2018-10-

14 05:47:16

PHP 调试日志输出(来自 "log" 中的设置:launch.json 中的 true):

<- launchResponse
Response {
seq: 0,
type: 'response',
request_seq: 2,
command: 'launch',
success: true }

据我所知,9000 是默认使用的 php-fpm 端口。因此,如果您对 xdebug.remote_port=9000 使用相同的端口,它将不起作用。您可以通过 nginx conf 检查是否以我的 cat /etc/nginx/conf.d/site.conf 为例,您可以检查行 fastcgi_pass 127.0.0.1:9000; 或 运行 lsof -n -iTCP:9000 | grep LISTEN 将显示它是否被使用。我建议你

  • 将其更改为未使用的内容,例如:10000
  • xdebug.remote_host 可能出错,登录到容器并尝试 ping 172.17.0.2 如果它不工作你的 xdebug.remote_host 是错误的。找到宿主机的ip替换成当前的172.17.0.2

尝试设置 xdebug.remote_connect_back=1,如果可行请告诉我。

如果确实如此,我们可能应该将此问题作为问题 的副本来关闭。

我 运行 VM 上的本地 linux Web 服务器。我使用 samba 映射到 Windows 设备字母上,我的 share.I 遵循了所有建议,但断点没有按预期工作。我只能调试添加 "stopOnEntry": true" 到 launch.json,但不能在个人添加的断点上,它们都被忽略了。 我的问题是我的应用所在的路径 运行ning,我这样修复:

{
        "name": "Listen for XDebug",
        "type": "php",
        "request": "launch",
        "port": 9900,             
        "log": true,
       "stopOnEntry": false,
        "pathMappings": {
             "/var/www/html/booking" : "z:",

          }
 },

    {
        "name": "Launch currently open script",
        "type": "php",
        "request": "launch",
        "program": "${file}",
        "cwd": "${fileDirname}",
        "port": 9900
    }
]

}

这显然是我的 linux 路径 ->“/var/www/html/booking” 这是驱动器映射字母 -> "z:"