无法让 Xdebug 3 与 Laravel Sail、Docker 和 Visual Studio Code 一起工作

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

我花了好几个小时尝试我或 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

如果您需要我提供更多信息、设置或代码,请告诉我!

  • PHP 版本 8.1.5
  • Xdebug 版本 3.1.2

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

php laravel docker visual-studio-code xdebug
4个回答
7
投票

我有同样的问题。我通过更新 docker 的 php.ini 文件解决了这个问题。 要更新 php.ini 的 sail docker,您必须遵循以下步骤

  1. 奔跑:

./vendor/bin/sail artisan sail:publish

这将在项目的根目录中创建 docker 文件夹。

  1. 更新 docker/8.1 文件夹的 php.ini。在 php.ini 中添加此代码

[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

  1. 刷新 sail docker 容器:

    ./vendor/bin/sail build --no-cache

  2. 将以下行添加到 .env 文件

SAIL_XDEBUG_MODE=开发、调试

  1. 运行 docker 并使用 vscode 享受你的 xdebug。

1
投票

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
.


1
投票

我遇到了与您尝试让 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 容器。


0
投票

尝试设置时,我将

"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 容器中运行,您的输出应该如下所示:

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