【发布时间】:2020-06-20 10:59:14
【问题描述】:
我想使用 VSCode 的“PHP Debug”插件和 Xdebug 来调试 PHP 脚本。
但是当我选择“调试|开始调试 F5”时,会出现小调试弹出窗口,我被卡住了。暂停、重新启动、停止按钮处于活动状态。 Step over, into, out 按钮处于非活动状态(灰显)。调试控制台中没有任何反应。
(1) VSCode 1.42.1 已安装
(2) XAMPP v3.2.4 已启动并运行
(3) 使用向导安装 Xdebug 并粘贴我的 phpinfo() 数据以确定正确的版本。当我从 XAMPP 控制面板启动“管理员”并查看 phpinfo 时,浏览器会显示我(以及许多其他内容):
[...]
This program makes use of the Zend Scripting Language Engine:
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Xdebug v2.9.2, Copyright (c) 2002-2020, by Derick Rethans
[...]
(4) php.ini 有
[XDEBUG]
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.show_local_vars = 1
xdebug.remote_log = "C:\Program Files_\xampp\php\logs\xdebug.log"
zend_extension = "php_xdebug-2.9.2-7.4-vc15-x86_64.dll"
(请注意“Program Files_”不是受保护的“Program Files”目录,XAMPP 具有写访问权限,如下面第(9)点所示)
(5) Windows 路径中有C:\Program Files_\xampp\php;
(6) 当我在 VSCode 中使用 Code Runner 扩展运行“Hello World.php”脚本时运行良好
(7) launch.json 用于 VSCode 调试器有
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9000,
}
]
(8) 我的 Windows 防火墙有一个入站规则,允许端口 9000 上的 TCP 流量。
(9) 当我刚刚运行代码时,xdebug.log(参见php.ini)会更新为
[94396] Log opened at 2020-03-08 07:45:28
[94396] I: Connecting to configured address/port: localhost:9000.
[94396] E: Time-out connecting to client (Waited: 200 ms). :-(
[94396] Log closed at 2020-03-08 07:45:28
但是当我使用“Debug|Start Debugging F5”时,xdebug.log 中没有任何反应。
到目前为止,这就是我认为相关的所有信息。这让我像这样:
me -> update_status("at wit's end")
你们那里的巫师知道在哪里挖掘吗?要调整哪个配置文件?查阅哪个日志文件?
脚注:在 VSCode 中调试 Python 脚本的工作与预期一样。
【问题讨论】:
-
您是在尝试调试命令行脚本还是 Web 应用程序?对于后者,您通常需要安装浏览器扩展程序并从那里启动应用程序。
-
@ÁlvaroGonzález:好问题。第一步是调试一个命令行脚本,一个带有 echo phpinfo() 的简单文件 hello_world.php;以及其中的另一个回声“Hello World”。我可以运行它(上面的第 6 点),但调试器如上所述卡住了
-
让 VSCode 侦听调试连接,然后检查它是否真的在该端口上侦听(以及那是什么应用程序)。使用
netstat或其他工具(例如带有 GUI 的工具)。根据日志,Xdebug 无法连接到 VSCode 应该监听的 Xdebug TCP 9000 端口。也许它不听? -
@LazyOne 这听起来像是一个很好的假设......如果 VSCode 不听,那么它可能会卡住(除非有某种超时)。你写 “让 VSCode 监听调试连接” => 我相信这就是
launch.json的用途,对吗?我启动 XAMPP 和 VSCode 以管理员身份打开 CMD 提示符并运行netstat -ab。有一个条目TCP 0.0.0.0:9000 [...] LISTENING [Code.exe]...所以我相信VSCode正在监听... -
@LazyOne ...感谢您的帮助。你给了我找到解决方案的工具(并意识到我犯的愚蠢错误)。请参阅下面的答案stackoverflow.com/a/60621125/9303446 ...
标签: php visual-studio-code xampp xdebug