我已经阅读了大部分关于为 VS Code 设置 PHP Xdebug 的帖子,但没有找到适合我的解决方案。 我已经在一台新笔记本电脑上安装了 VS Code(这是相关的,因为我知道还安装了其他内容,并且没有多个 PHP 实例 - 但似乎有!)
我已在 Windows 11 PC 上安装了 XAMPP,其中包括 PHP 8.2.12。
php -v
显示:
PHP 8.2.12 (cli) (built: Oct 24 2023 21:15:15) (ZTS Visual C++ 2019 x64)
Copyright (c) The PHP Group
Zend Engine v4.2.12, Copyright (c) Zend Technologies
with Xdebug v3.3.2, Copyright (c) 2002-2024, by Derick Rethans
php.ini
说:
zend_extension = c:\xampp\php\ext\php_xdebug.dll
xdebug.start_with_request = yes
xdebug.client_port = 9900
xdebug.client_host = 127.0.0.1
xdebug.default_enable=1
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_log="C:\xampp\apache\logs\xdebug.log"
VS Code 中的 json 设置为:
{
"workbench.colorTheme": "Visual Studio Light",
"debug.allowBreakpointsEverywhere": true,
"php.executables": { "v8.2": "//xampp//php//php.exe" },
"launch": {
"configurations": [ {
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9900,
"pathMappings": {
"c:/xampp/php/ext": "${workspaceFolder}"
}
}
]]
}
}
根据我读过的所有帖子,应该可以做到这一点,但是当尝试调试简单的 PHP 时,我收到此错误:
Failed loading C:\php\ext\php_xdebug-2.6.1-7.2-vc15-nts-x86_64.dll
现在我不是专家,但这似乎是在说它试图运行 PHP 7.2 并且想要 Xdebug 2.6.1。非线程安全的 xdebug.dll。
但是我在 PC 上找不到 php.exe 的其他实例 - 它在 VS Code 中的哪个位置寻找
c:\php\ext\
一个不存在的文件夹。我在 VS Code 中找不到存在此类设置的位置,也找不到如何告诉 VS Code 在正确的文件夹中查找(在本例中为 c:\xampp\php\ext
)
FWIW 虽然我正在使用 RobertLu 的 PHP 调试扩展,但我已经尝试了所有其他可用的扩展。不久前,我在以前的笔记本电脑上使用 Felix Beckers PHP 调试扩展确实取得了一些成功,但它不再出现在 VS Code 的可用扩展列表中。
任何意见或建议,感激不尽。
这是我通过尝试错误(更多的是绝望的分散枪方法)发现的部分答案,有趣的是确保 php.ini 中没有 xdebug v2.6 指令对 VSCode 错误没有影响。
Failed loading C:\php\ext\php_xdebug-2.6.1-7.2-vc15-nts-x86_64.dll
我复制了在网上找到的许多 launch.json 示例,确保 php 的端口和路径与 php.ini 匹配。
这个 launch.json 版本似乎消除了误导性的 php7.2 错误。 (我没有得到 php7.2 任何地方)我猜测如果 php.exe 的路径(也需要在 settings.json 中设置)是错误的,那么 VSCode 对您正在使用哪个 PHP 版本有一些后备假设
"type": "php",
"request": "launch",
"runtimeExecutable": "C:/pathtophpexe/php.exe",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9003
}
此后我开始收到“端口”错误
Invalid "xdebug.client_port" setting. Invalid quantity "${port}": no valid leading digits
后一个问题是通过替换 php.ini 行意外解决的
xdebug.client_host = 127.0.0.1
与
xdebug.client_host = localhost
xdebug.log 说它无法连接到端口,因此当然不会单步执行
无论如何,在 php.ini 中用 localhost 替换 127.0.0.1 已经解决了问题。
因此,虽然主要目标已经实现,即让调试工作,但我不知道 php7.2 错误来自哪里(它似乎与 xdebug 版本 2.6 指令无关)
也不知道为什么指定 127.0.0.1 不起作用,而 localhost 却起作用。
如果您能阐明并想发表评论,请阅读并理解问题的本质:“为什么 VSCode 在未安装 PHP v7.2 和 xdebug 2.6 的情况下会报告和错误?”其次,“为什么指定 localhost 成功,而 127.0.0.1 不成功?”
哦,tx PaulT,您建议的那个网站是我在尝试各种 launch.json 示例的分散枪方法中遇到的一个网站。有趣的是,它说这是“必要的;”包括行
xdebug.idekey=VSCODE
我发现情况并非如此(无论它是否在 php.ini 中,但我只进行简单的 cli 调试 - 在任何情况下,默认值是 vsc,它可以在这里找到
in VSCode under File > Preference > Settings > Extensions > PHP Debug > Ide Key.
很抱歉这不是完整的解释,但它可能对其他人有帮助 干杯