为什么我不能使用Xdebug v3在Docker上使用VS Code调试我的PHP代码?

ycggw6v2  于 2023-10-15  发布在  PHP
关注(0)|答案(1)|浏览(100)

我正在尝试构建一个小环境来测试PHP调试在Docker中使用Visual Studio Code。我的想法是创建一个模型,我可以使用我们在公司的几个PHP系统。然而,我还不能调试或使用断点.
这是我的文档

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中的蓝色底部栏没有像它应该的那样变成橙子。在建立了我的环境却无法让它工作之后。

gzjq41n4

gzjq41n41#

看起来Xdebug已经连接到vscode并启动了一个调试会话。因此,Zobo的评论可能是正确的:这只是一个路径Map问题。
实际上,在您的docker-compose.yml中,

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

但在launch.json配置中,

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

因此,假设docker-compose.yml位于根文件夹(也是vscode的工作区文件夹)中,您实际上需要Map

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

相关问题