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

Dav*_*e33 8 php xdebug laravel docker visual-studio-code

我花了很多时间尝试我或 Google 能想到的一切,但 Xdebug 不会在任何断点上停止。

\n

还查看了这个问题和答案,但仍然...不走运:\n Unable to get Xdebug 3 with Docker

\n

过去它可以工作,但不知何故它不再工作了。也许是 docker 或任何包/应用程序的更新导致它停止。

\n

在 macOS 上:

\n
    \n
  • 删除了docker,用最新版本(4.8.1 78998)重新安装了它。

    \n
  • \n
  • 删除了我当前的 Laravel Sail 项目并通过以下方式创建了一个新的 Laravel Sail 项目curl -s "https://laravel.build/example-app" | bash

    \n
  • \n
  • 添加SAIL_XDEBUG_MODE=develop,debug到新创建的 .env 文件中

    \n
  • \n
  • sail up -d开始一切

    \n
  • \n
  • 删除并重新安装 Visual Studio Code 最新版本:1.6.7.1

    \n
  • \n
  • 创建了一个包含以下内容的 PHP launch.json 文件:

    \n
    {\n    "version": "0.2.0",\n    "configurations": [\n        {\n            "name": "Listen for Sail Xdebug",\n            "type": "php",\n            "request": "launch",\n            "port": 9003,\n            "pathMappings": {\n                "/var/www/html": "${workspaceFolder}"\n            },\n            "hostname": "localhost",\n            "ignore": [\n                "**/vendor/**/*.php"\n            ],\n            "xdebugSettings": {\n                "max_data": 65536,\n                "show_hidden": 1,\n                "max_children": 100,\n                "max_depth": 3\n            }\n        }\n    ]\n}\n
    Run Code Online (Sandbox Code Playgroud)\n
  • \n
  • 在 VSCode 中收到以下消息:

    \n
    \n

    \'无法验证,因为找不到 PHP 安装。使用设置“php.validate.executablePath”来配置 PHP 可执行文件。\'

    \n
    \n

    我不知道这是否是问题所在,也不知道我应该做什么,因为我正在使用 docker。

    \n
  • \n
  • 在路由文件或您创建的任何其他文件中放置断点

    \n
  • \n
  • 在 VSCode 的“运行和调试”选项卡内,我告诉它使用配置“监听 Sail Xdebug”并运行调试器 (F5) -> 我检查了所有断点复选框(通知、警告、错误...... .)

    \n
  • \n
\n

什么都没发生。VSCode 不会在任何断点处停止。

\n

我仍然不知道在哪里可以让它再次运行。

\n

如果有人,也许是德里克本人,能够帮助我,我会非常高兴。我剩下的最后一根头发都快要拔掉了:O

\n

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

\n
    \n
  • PHP 版本 8.1.5
  • \n
  • Xdebug版本3.1.2
  • \n
\n

xdebug_info()说:

\n
Version 3.1.2\nSupport Xdebug on Patreon, GitHub, or as a business\nEnabled Features\n(through \'XDEBUG_MODE\' env variable)\nFeature Enabled/Disabled    Docs\nDevelopment Helpers \xe2\x9c\x94 enabled   \nCoverage    \xe2\x9c\x98 disabled  \nGC Stats    \xe2\x9c\x98 disabled  \nProfiler    \xe2\x9c\x98 disabled  \nStep Debugger   \xe2\x9c\x94 enabled   \nTracing \xe2\x9c\x98 disabled  \nOptional Features\nCompressed File Support no\nClock Source    clock_gettime\nDiagnostic Log\nNo messages\nStep Debugging  Docs\nDebugger    Not Active  \nPHP\nBuild Configuration\nVersion (Run Time)  8.1.5\nVersion (Compile Time)  8.1.1\nDebug Build no\nThread Safety   disabled\nSettings\nConfiguration File (php.ini) Path   /etc/php/8.1/cli\nLoaded Configuration File   /etc/php/8.1/cli/php.ini\nScan this dir for additional .ini files /etc/php/8.1/cli/conf.d\nAdditional .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\nDirective   Local Value Master Value    Docs\nxdebug.mode (through XDEBUG_MODE)   develop,debug   develop \nxdebug.start_with_request   default default \nxdebug.start_upon_error default default \nxdebug.output_dir   /tmp    /tmp    \nxdebug.use_compression  0   0   \nxdebug.trigger_value    no value    no value    \nxdebug.file_link_format no value    no value    \nxdebug.filename_format  no value    no value    \nxdebug.log  no value    no value    \nxdebug.log_level    7   7   \nxdebug.var_display_max_children 128 128 \nxdebug.var_display_max_data 512 512 \nxdebug.var_display_max_depth    3   3   \nxdebug.max_nesting_level    256 256 \nxdebug.cli_color    0   0   \nxdebug.force_display_errors Off Off \nxdebug.force_error_reporting    0   0   \nxdebug.halt_level   0   0   \nxdebug.max_stack_frames -1  -1  \nxdebug.show_error_trace Off Off \nxdebug.show_exception_trace Off Off \nxdebug.show_local_vars  Off Off \nxdebug.dump.COOKIE  no value    no value    \nxdebug.dump.ENV no value    no value    \nxdebug.dump.FILES   no value    no value    \nxdebug.dump.GET no value    no value    \nxdebug.dump.POST    no value    no value    \nxdebug.dump.REQUEST no value    no value    \nxdebug.dump.SERVER  no value    no value    \nxdebug.dump.SESSION no value    no value    \nxdebug.dump_globals On  On  \nxdebug.dump_once    On  On  \nxdebug.dump_undefined   Off Off \nxdebug.profiler_output_name cachegrind.out.%p   cachegrind.out.%p   \nxdebug.profiler_append  Off Off \nxdebug.cloud_id no value    no value    \nxdebug.client_host  host.docker.internal    localhost   \nxdebug.client_port  9003    9003    \nxdebug.discover_client_host Off Off \nxdebug.client_discovery_header  no value    no value    \nxdebug.idekey   no value    no value    \nxdebug.connect_timeout_ms   200 200 \nxdebug.scream   Off Off \nxdebug.gc_stats_output_name gcstats.%p  gcstats.%p  \nxdebug.trace_output_name    trace.%c    trace.%c    \nxdebug.trace_format 0   0   \nxdebug.trace_options    0   0   \nxdebug.collect_assignments  Off Off \nxdebug.collect_return   Off Off\n\n
Run Code Online (Sandbox Code Playgroud)\n

小智 10


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

  1. 跑步 :

./vendor/bin/sail 工匠帆:发布

这将在项目的根目录中创建 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
Run Code Online (Sandbox Code Playgroud)

  1. 使用以下命令刷新 sail docker 容器:

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

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

SAIL_XDEBUG_MODE=开发、调试

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


Der*_*ick 1

Laravel Sail 应该开箱即用。我制作了一个名为“Laravel Sail with PhpStorm”的 5 分钟视频,但它应该与具有您概述的配置的 VS Code 一起工作。

要找出某些功能不起作用的原因,您可以尝试调试xdebug_info()其中包含的文件。它会告诉您 Xdebug 是否(以及是否)尝试建立连接、连接到何处以及结果是什么。每条错误消息(如果存在)旁边还直接提供了文档链接。

你的日志说:

诊断日志 无消息

这意味着您没有通过触发器指示 Xdebug 启动调试会话。您需要告诉 Xdebug 启动一个。Laravel Sail 文档指出了有关如何执行此操作的Xdebug 文档。它建议您在想要或不想调试时使用提到的浏览器扩展之一来“单击”。

如果您需要更多调试信息,请创建一个日志文件并将其增加到 10:xdebug.log=/tmp/xdebug.logxdebug.log_level=10.