为什么我无法使用 Xdebug v3 在 VS Code 上调试 docker 上的 PHP 代码?

问题描述 投票:0回答:1

我正在尝试构建一个小型环境,以使用 Visual Studio Code 在 docker 中测试 PHP 调试。我的想法是创建一个模型,可以用于我们公司的多个 PHP 系统。但是,我无法调试或使用断点……就像 VSCode 与 Xdebug 断开连接一样。

这是我的 Dokerfile

FROM php:7.4-apache

RUN apt-get update && apt upgrade -y
RUN docker-php-ext-install pdo mysqli pdo_mysql \
&& docker-php-ext-enable mysqli 
RUN pecl install xdebug-3.1.5 \
&& docker-php-ext-enable xdebug
ADD ./app /var/www/html
COPY ./app/test-form.conf /etc/apache2/sites-available/test-form.conf

# Copy php.ini
COPY ./php.ini /usr/local/etc/php

RUN echo 'SetEnv MYSQL_DB_CONNECTION ${MYSQL_DB_CONNECTION}' >> /etc/apache2/conf-enabled/environment.conf
RUN echo 'SetEnv MYSQL_DB_NAME ${MYSQL_DB_NAME}' >> /etc/apache2/conf-enabled/environment.conf
RUN echo 'SetEnv MYSQL_USER ${MYSQL_USER}' >> /etc/apache2/conf-enabled/environment.conf
RUN echo 'SetEnv MYSQL_PASSWORD ${MYSQL_PASSWORD}' >> /etc/apache2/conf-enabled/environment.conf
RUN echo 'SetEnv SITE_URL ${SITE_URL}' >> /etc/apache2/conf-enabled/environment.conf
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf &&\
    a2enmod rewrite &&\
    a2enmod headers &&\
    a2enmod rewrite &&\
    a2dissite 000-default &&\
    a2ensite test-form &&\
    service apache2 restart

这是我的 docker-compose.yml

version: "1"
services:
  webserver:
    image: form-test
    ports:
      - "80:80"
      # - "443:443"
    volumes:
      - ./app:/var/www/html
    extra_hosts:
      - "host.docker.internal:host-gateway"
    environment:
      MYSQL_DB_CONNECTION: test
      MYSQL_DB_NAME: test
      MYSQL_USER: test
      MYSQL_PASSWORD: test
      SITE_URL: http://localhost
      XDEBUG_MODE: develop,debug
      XDEBUG_CONFIG:
        client_host=host.docker.internal
        start_with_request=yes
networks:
  internal:
    driver: bridge

这是我的xdebug_info.php

<?php

// xdebug_info();

phpinfo();

这是我的 php.ini

[xdebug]
zend_extension=xdebug
xdebug.mode=develop,debug
xdebug.start_with_request=yes
xdebug.remote_port=9003
xdebug.client_port=9003
xdebug.remote_host=host.docker.internal

这是我的launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen on Docker for Xdebug",
            "type": "php",
            "request": "launch",
            "port": 9003,
            "pathMappings": {
                "/var/www/html": "${workspaceFolder}"
            },
            "hostname": "0.0.0.0"
        },    
    ]
}

现在这很奇怪……似乎 Xdebug 已成功连接到 VSCode,因为当我启动我的

xdebug_info.php
时,它会显示以下消息:

当我开始在 VSCode 上监听时,消息消失了:

我还注意到 VS Code 中的蓝色底部栏没有像应有的那样变成橙色。在建立了我的环境后但无法使其正常工作。

php docker visual-studio-code xdebug vscode-debugger
1个回答
0
投票

Xdebug 似乎已经连接到 vscode 并启动调试会话。所以 zobo 的评论可能是对的:这只是一个路径映射问题。 事实上,在你的

docker-compose.yml

中你是绑定安装

    volumes:
      - ./app:/var/www/html

但是在你的 
launch.json

配置中你有

            "pathMappings": {
                "/var/www/html": "${workspaceFolder}"
            },

所以 - 假设 
docker-compose.yml

位于根文件夹中,这也是 vscode 的工作区文件夹 - 你实际上需要映射

            "pathMappings": {
                "/var/www/html": "${workspaceFolder}/app"
            },

© www.soinside.com 2019 - 2024. All rights reserved.