无法让 Xdebug 3 与 Docker 一起工作

问题描述

所以,在花了几天的时间浏览但没有成功试图弄清楚为什么升级到 Xdebug 3 似乎只能部分地与我的 Dockerized Laravel 项目一起工作之后,我来了。我密切关注 upgrade guide 和官方文档,其他 recent posts here,并且仍然完全不明白为什么调试器不会在断点处停止,除非我手动传入配置选项以运行 Artisan 命令(更多内容见下文)。 Xdebug 2 一切正常。

以下是(我认为是)配置文件/输出的相关部分。是的,我意识到多次设置相同的配置,这是尝试在许多不同位置设置这些选项的结果。

docker-compose.yml

PHP:
    build:
      context: .
      dockerfile: PHP.dockerfile
    container_name: PHP
    environment:
      XDEBUG_CONfig: client_host=host.docker.internal client_port=9001 mode=debug start_with_request=yes
      XDEBUG_MODE: debug
    volumes:
      - ./src:/var/www/html:delegated
    ports:
      - "9000:9000"
    networks:
      - v2

PHP.dockerfile

FROM PHP:8.0-fpm

workdir /var/www/html

RUN docker-PHP-ext-install pdo pdo_MysqL bcmath \
  && pecl install -f xdebug-3.0.1 \
  && echo "zend_extension=$(find /usr/local/lib/PHP/extensions/ -name xdebug.so)" >> /usr/local/etc/PHP/conf.d/xdebug.ini;

我的主机 (Windows) PHP.ini(如果相关)

zend_extension=C:\xampp\PHP\ext\PHP_xdebug-3.0.1-8.0-vs16-x86_64.dll
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_port=9001
xdebug.idekey=VSCODE

launch.json

{
    "version": "0.2.0","configurations": [
        {
            "name": "Listen for XDebug","type": "PHP","request": "launch","port": 9001,"pathMappings": {
                "/var/www/html": "${workspaceFolder}/src"
            },"xdebugSettings": {
                "max_data": 65535,"show_hidden": 1,"max_children": 100,"max_depth": 5
            },}
    ]
}

PHP -i 输出的 Xdebug 部分(删除了不推荐使用的选项)

Feature => Enabled/disabled
Development Aids => ✘ disabled
Coverage => ✘ disabled
GC Stats => ✘ disabled
Profiler => ✘ disabled
Step Debugger => ✔ enabled
Tracing => ✘ disabled

Debugger => enabled
IDE Key =>  

Directive => Local Value => Master Value
xdebug.cli_color => 0 => 0
xdebug.client_discovery_header => no value => no value
xdebug.client_host => host.docker.internal => localhost
xdebug.client_port => 9001 => 9003
xdebug.cloud_id => no value => no value
xdebug.collect_assignments => Off => Off
xdebug.collect_return => Off => Off
xdebug.connect_timeout_ms => 200 => 200
xdebug.discover_client_host => Off => Off
xdebug.dump.COOKIE => no value => no value
xdebug.dump.ENV => no value => no value
xdebug.dump.FILES => no value => no value
xdebug.dump.GET => no value => no value
xdebug.dump.POST => no value => no value
xdebug.dump.REQUEST => no value => no value
xdebug.dump.SERVER => no value => no value
xdebug.dump.SESSION => no value => no value
xdebug.dump_globals => On => On
xdebug.dump_once => On => On
xdebug.dump_undefined => Off => Off
xdebug.file_link_format => no value => no value
xdebug.filename_format => no value => no value
xdebug.force_display_errors => Off => Off
xdebug.force_error_reporting => 0 => 0
xdebug.gc_stats_output_name => gcstats.%p => gcstats.%p
xdebug.halt_level => 0 => 0
xdebug.idekey => no value => no value
xdebug.log => no value => no value
xdebug.log_level => 7 => 7
xdebug.max_nesting_level => 256 => 256
xdebug.max_stack_frames => -1 => -1
xdebug.mode => develop => develop
xdebug.output_dir => /tmp => /tmp
xdebug.profiler_append => Off => Off
xdebug.profiler_output_name => cachegrind.out.%p => cachegrind.out.%p
xdebug.scream => Off => Off
xdebug.show_error_trace => Off => Off
xdebug.show_exception_trace => Off => Off
xdebug.show_local_vars => Off => Off
xdebug.start_upon_error => default => default
xdebug.start_with_request => default => default
xdebug.trace_format => 0 => 0
xdebug.trace_options => 0 => 0
xdebug.trigger_value => no value => no value
xdebug.var_display_max_children => 128 => 128
xdebug.var_display_max_data => 512 => 512
xdebug.var_display_max_depth => 3 => 3

加上附加模块

XDEBUG_MODE => debug
XDEBUG_CONfig => client_host=host.docker.internal client_port=9001 mode=debug start_with_request=yes
...
$_SERVER['XDEBUG_MODE'] => debug
$_SERVER['XDEBUG_CONfig'] => client_host=host.docker.internal client_port=9001 mode=debug start_with_request=yes
...
$_ENV['XDEBUG_MODE'] => debug
$_ENV['XDEBUG_CONfig'] => client_host=host.docker.internal client_port=9001 mode=debug start_with_request=yes

正如我所提到的,直接在 CLI 上将选项作为标志运行确实尊重我设置的断点——也就是说,猛击 PHP 容器然后运行 ​​PHP -dxdebug.mode=debug -dxdebug.start_with_request=yes -dxdebug.client_port=9001 -dxdebug.client_host=127.0.0.1 artisan some:command调试器就好了。

对于长度和文件转储表示歉意,但此时我真的迷失了方向,因此将不胜感激!

编辑: 看起来我遇到的任何问题都已在 Xdebug 3.0.2解决。感谢 LazyOne 的帮助!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...