我花了好几个小时尝试我或 Google 能想到的一切,但 Xdebug 不会在任何断点处停止。
也看过这个问题和答案,但仍然......没有运气: 无法让 Xdebug 3 与 Docker 一起工作
以前还行,后来不知怎么就不行了。也许 docker 的更新或任何包/应用程序导致它停止。
在 macOS 上:
删除了docker,用最新版本(4.8.1 78998)重新安装它。
删除了我当前的 Laravel Sail 项目并通过
curl -s "https://laravel.build/example-app" | bash
创建了一个新的 Laravel Sail 项目
添加
SAIL_XDEBUG_MODE=develop,debug
到新创建的 .env 文件
sail up -d
开始一切
删除并重新安装 Visual Studio Code 最新版本:1.6.7.1
创建了一个包含以下内容的 PHP launch.json 文件:
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Sail Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/var/www/html": "${workspaceFolder}"
},
"hostname": "localhost",
"ignore": [
"**/vendor/**/*.php"
],
"xdebugSettings": {
"max_data": 65536,
"show_hidden": 1,
"max_children": 100,
"max_depth": 3
}
}
]
}
在 VSCode 中收到以下消息:
'无法验证,因为找不到 PHP 安装。使用设置 'php.validate.executablePath' 来配置 PHP 可执行文件。'
我不知道这是问题所在还是我应该做的,因为我正在使用 docker。
在路由文件或您创建的任何其他文件中放置断点
在 VSCode 的“运行和调试”选项卡中,我告诉它使用配置“Listen for Sail Xdebug”并运行调试器 (F5) -> 我检查了所有断点复选框(通知、警告、错误...)
什么都没发生。 VSCode 不会在任何断点处停止。
我仍然不知道去哪里让它再次工作。
如果有人,也许是 Derick 本人,可以帮助我,我会很高兴。我剩下的最后一根头发都快拔掉了:O
如果您需要我提供更多信息、设置或代码,请告诉我!
xdebug_info()
说:
Version 3.1.2
Support Xdebug on Patreon, GitHub, or as a business
Enabled Features
(through 'XDEBUG_MODE' env variable)
Feature Enabled/Disabled Docs
Development Helpers ✔ enabled 🖹
Coverage ✘ disabled 🖹
GC Stats ✘ disabled 🖹
Profiler ✘ disabled 🖹
Step Debugger ✔ enabled 🖹
Tracing ✘ disabled 🖹
Optional Features
Compressed File Support no
Clock Source clock_gettime
Diagnostic Log
No messages
Step Debugging Docs
Debugger Not Active 🖹
PHP
Build Configuration
Version (Run Time) 8.1.5
Version (Compile Time) 8.1.1
Debug Build no
Thread Safety disabled
Settings
Configuration File (php.ini) Path /etc/php/8.1/cli
Loaded Configuration File /etc/php/8.1/cli/php.ini
Scan this dir for additional .ini files /etc/php/8.1/cli/conf.d
Additional .ini files parsed /etc/php/8.1/cli/conf.d/10-mysqlnd.ini, /etc/php/8.1/cli/conf.d/10-opcache.ini, /etc/php/8.1/cli/conf.d/10-pdo.ini, /etc/php/8.1/cli/conf.d/15-xml.ini, /etc/php/8.1/cli/conf.d/20-bcmath.ini, /etc/php/8.1/cli/conf.d/20-calendar.ini, /etc/php/8.1/cli/conf.d/20-ctype.ini, /etc/php/8.1/cli/conf.d/20-curl.ini, /etc/php/8.1/cli/conf.d/20-dom.ini, /etc/php/8.1/cli/conf.d/20-exif.ini, /etc/php/8.1/cli/conf.d/20-ffi.ini, /etc/php/8.1/cli/conf.d/20-fileinfo.ini, /etc/php/8.1/cli/conf.d/20-ftp.ini, /etc/php/8.1/cli/conf.d/20-gd.ini, /etc/php/8.1/cli/conf.d/20-gettext.ini, /etc/php/8.1/cli/conf.d/20-iconv.ini, /etc/php/8.1/cli/conf.d/20-igbinary.ini, /etc/php/8.1/cli/conf.d/20-imap.ini, /etc/php/8.1/cli/conf.d/20-intl.ini, /etc/php/8.1/cli/conf.d/20-ldap.ini, /etc/php/8.1/cli/conf.d/20-mbstring.ini, /etc/php/8.1/cli/conf.d/20-msgpack.ini, /etc/php/8.1/cli/conf.d/20-mysqli.ini, /etc/php/8.1/cli/conf.d/20-pcov.ini, /etc/php/8.1/cli/conf.d/20-pdo_mysql.ini, /etc/php/8.1/cli/conf.d/20-pdo_pgsql.ini, /etc/php/8.1/cli/conf.d/20-pdo_sqlite.ini, /etc/php/8.1/cli/conf.d/20-pgsql.ini, /etc/php/8.1/cli/conf.d/20-phar.ini, /etc/php/8.1/cli/conf.d/20-posix.ini, /etc/php/8.1/cli/conf.d/20-readline.ini, /etc/php/8.1/cli/conf.d/20-redis.ini, /etc/php/8.1/cli/conf.d/20-shmop.ini, /etc/php/8.1/cli/conf.d/20-simplexml.ini, /etc/php/8.1/cli/conf.d/20-soap.ini, /etc/php/8.1/cli/conf.d/20-sockets.ini, /etc/php/8.1/cli/conf.d/20-sqlite3.ini, /etc/php/8.1/cli/conf.d/20-sysvmsg.ini, /etc/php/8.1/cli/conf.d/20-sysvsem.ini, /etc/php/8.1/cli/conf.d/20-sysvshm.ini, /etc/php/8.1/cli/conf.d/20-tokenizer.ini, /etc/php/8.1/cli/conf.d/20-xdebug.ini, /etc/php/8.1/cli/conf.d/20-xmlreader.ini, /etc/php/8.1/cli/conf.d/20-xmlwriter.ini, /etc/php/8.1/cli/conf.d/20-xsl.ini, /etc/php/8.1/cli/conf.d/20-zip.ini, /etc/php/8.1/cli/conf.d/25-memcached.ini, /etc/php/8.1/cli/conf.d/25-swoole.ini, /etc/php/8.1/cli/conf.d/99-sail.ini
Directive Local Value Master Value Docs
xdebug.mode (through XDEBUG_MODE) develop,debug develop 🖹
xdebug.start_with_request default default 🖹
xdebug.start_upon_error default default 🖹
xdebug.output_dir /tmp /tmp 🖹
xdebug.use_compression 0 0 🖹
xdebug.trigger_value no value no value 🖹
xdebug.file_link_format no value no value 🖹
xdebug.filename_format no value no value 🖹
xdebug.log no value no value 🖹
xdebug.log_level 7 7 🖹
xdebug.var_display_max_children 128 128 🖹
xdebug.var_display_max_data 512 512 🖹
xdebug.var_display_max_depth 3 3 🖹
xdebug.max_nesting_level 256 256 🖹
xdebug.cli_color 0 0 🖹
xdebug.force_display_errors Off Off 🖹
xdebug.force_error_reporting 0 0 🖹
xdebug.halt_level 0 0 🖹
xdebug.max_stack_frames -1 -1 🖹
xdebug.show_error_trace Off Off 🖹
xdebug.show_exception_trace Off Off 🖹
xdebug.show_local_vars 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.profiler_output_name cachegrind.out.%p cachegrind.out.%p 🖹
xdebug.profiler_append Off Off 🖹
xdebug.cloud_id no value no value 🖹
xdebug.client_host host.docker.internal localhost 🖹
xdebug.client_port 9003 9003 🖹
xdebug.discover_client_host Off Off 🖹
xdebug.client_discovery_header no value no value 🖹
xdebug.idekey no value no value 🖹
xdebug.connect_timeout_ms 200 200 🖹
xdebug.scream Off Off 🖹
xdebug.gc_stats_output_name gcstats.%p gcstats.%p 🖹
xdebug.trace_output_name trace.%c trace.%c 🖹
xdebug.trace_format 0 0 🖹
xdebug.trace_options 0 0 🖹
xdebug.collect_assignments Off Off 🖹
xdebug.collect_return Off Off
我有同样的问题。我通过更新 docker 的 php.ini 文件解决了这个问题。 要更新 php.ini 的 sail docker,您必须遵循以下步骤
这将在项目的根目录中创建 docker 文件夹。
[XDebug]
zend_extension = xdebug.so
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.discover_client_host = true
xdebug.idekey = VSC
xdebug.client_host = host.docker.internal
xdebug.client_port = 9003
刷新 sail docker 容器:
./vendor/bin/sail build --no-cache
将以下行添加到 .env 文件
SAIL_XDEBUG_MODE=开发、调试
Laravel Sail 应该开箱即用。我制作了一个 5 分钟的video,标题为“Laravel Sail with PhpStorm”,但它应该同样适用于 VS Code 和您概述的配置。
要找出为什么某些东西不起作用,您可以尝试调试一个包含
xdebug_info()
的文件。它会告诉您 Xdebug 是否(以及是否)尝试建立连接、连接到哪里以及结果是什么。每条错误消息(如果存在)旁边还有指向文档的链接。
你的日志说:
诊断日志 没有留言
这意味着您没有指示 Xdebug 通过触发器启动调试会话。您需要告诉 Xdebug 启动一个。 Laravel Sail 文档 指向有关如何执行此操作的 Xdebug 文档。它建议您在要调试或不调试时使用提到的浏览器扩展之一来“单击”。
如果您需要更多调试信息,请制作一个日志文件并将其增加到 10:
xdebug.log=/tmp/xdebug.log
和 xdebug.log_level=10
.
我遇到了与您尝试让 Laravel Sail、XDebug 和 VS Code 合作调试 Linux 上新创建的 Laravel 项目时遇到的相同问题,尽管它应该像在 .env 文件中添加
SAIL_XDEBUG_MODE=develop,debug
一样工作。直到我还在 .env 文件中添加了SAIL_XDEBUG_CONFIG="client_host=localhost"
,它才起作用。我不必更改从 VS Code 自动创建的默认 launch.json 中的任何内容。请记住重启 VS Code 以使用新配置启动 docker 容器。
尝试设置时,我将
"log": true,
添加到我的 launch.json 文件中,以查看是否有错误或有用的信息。
以下使它对我有用:
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"hostname": "0.0.0.0",
"log": true,
"pathMappings": {
"/var/www/html": "${workspaceFolder}",
}
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 0,
"runtimeArgs": [
"-dxdebug.start_with_request=yes"
],
"env": {
"XDEBUG_MODE": "debug,develop",
"XDEBUG_CONFIG": "client_port=${port}"
}
},
{
"name": "Launch Built-in web server",
"type": "php",
"request": "launch",
"program": "",
"cwd": "${workspaceRoot}",
"port": 9003,
"serverReadyAction": {
"pattern": "Development Server \\(http://localhost:([0-9]+)\\) started",
"uriFormat": "http://localhost:%s",
"action": "openExternally"
}
}
]
将这两个添加到您的 .env 文件中。从 Laravel 版本 8.53.0 开始,
artisan serve
命令(为帆提供动力)只能识别这两个变量,因此添加其他变量没有意义。
XDEBUG_MODE=develop,debug,coverage
XDEBUG_CONFIG="client_host=host.docker.internal"
我还向 chrome 添加了 php XDebugHelper 扩展。
您可以通过
sail php -v
检查您的 Xdebug 实例是否在您的 sail 容器中运行,您的输出应该如下所示: