问题描述
所以,在花了几天的时间浏览但没有成功试图弄清楚为什么升级到 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 (将#修改为@)