【发布时间】:2021-08-11 08:38:50
【问题描述】:
我正在使用 Visual Studio Code,Xdebug 默认安装在其中,版本为 v3.x.x。
下面分享配置,
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9001,
"stopOnEntry":true,
"log": true,
"hostname": "localhost",
"pathMappings": {
"/var/www/html": "${workspaceRoot}",
"/app": "${workspaceRoot}/app"
}
}
]
}
php.ini,
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.discover_client_host=1
test.php
<?php
echo "<script>alert('Welcome');</script>";
phpinfo();
?>
现在,当我在本地主机上的端口 9001 启动调试器时(注意没有远程主机)。并通过http://localhost:9001/test.php
它在调试控制台上提供以下 cmets,
新连接 1 新连接 2
它开始了,但由于某种奇怪的原因给了我两个新连接,它们只有在我通过浏览器访问后才会打印出来。
现在我等待 5-10 秒(同时,浏览器继续加载,但什么都看不到,它仍在尝试访问 test.php)我已将调试器点放在所有行上。
突然10秒后,它关闭了与下面的cmets的连接,
<- outputEvent
OutputEvent {
seq: 0,
type: 'event',
event: 'output',
body: { category: 'console', output: 'connection 2 closed\n' }
}
connection 2 closed
<- continuedEvent
ContinuedEvent {
seq: 0,
type: 'event',
event: 'continued',
body: { threadId: 2, allThreadsContinued: false }
}
<- threadEvent
ThreadEvent {
seq: 0,
type: 'event',
event: 'thread',
body: { reason: 'exited', threadId: 2 }
}
<- outputEvent
OutputEvent {
seq: 0,
type: 'event',
event: 'output',
body: { category: 'stderr', output: 'connection closed\n' }
}
**connection closed**
我到处检查,但无法找到我的问题的答案。请求帮助
【问题讨论】:
-
"现在,当我在本地主机的 9001 端口启动调试器时(注意没有远程主机)。通过localhost:9001/test.php 访问它时, 这是只是错误。 1) Xdebug 端口仅用于 Xdebug 和调试客户端——它不应该用作网站地址。 2)它是连接到调试客户端(在你的情况下是VSCode)的Xdebug,而不是其他方式。所以现在你有
9001web 服务器使用的端口......而 VSCode 也是需要在该端口上侦听的端口。难怪它会因为 prot 已被另一个应用程序使用而关闭。 -
Xdebug v3 默认使用
9003端口。由于我看不到在 php.ini 中指定自定义端口,因此您的 VSCodelaunch.json应该有"port": 9003(9003 而不是 9001)。在任何情况下:必须使用 Xdebug 自己的日志进行故障排除——启用它并尝试调试,然后看看它要说什么。 1)youtube.com/watch?v=IN6ihpJSFDw 2)xdebug.org/docs/all_settings -
那么你的 xdebug 日志是什么?无论如何:检查 1) stackoverflow.com/q/68668079/783119 2) stackoverflow.com/q/65316966/783119 。我自己并没有真正使用 VSCode(我很高兴 PhpStorm 用户).. 但只是检查了一下,我可以轻松地在 VSCode 中调试 CLI PHP 脚本 -- i.imgur.com/bopBDGX.png 和 i.imgur.com/7sYTu4m.gif。对于网页,我必须进行额外的设置,而我并不想做 ATM ...
-
如果你想使用 PhpStorm: 1) jetbrains.com/phpstorm/documentation/debugging 2) jetbrains.com/help/phpstorm/… 。你的 Xdebug 配置——你的 php.ini 的前 2 行——应该足够了。 Xdebug 将使用默认的
localhost和9003作为主机/端口来连接。 Xdebug 将显示它尝试连接的位置(如果它尝试连接)以及响应是什么。我正在使用 IIS(Windows Web 服务器)为我的本地开发网站提供服务。但可以调试任何PHP,甚至是PHP自带的内置服务器。 -
P.S. 1) 检查您的实际/实时 Xdebug 配置总是有意义的——使用
phpinfo()并检查 Xdebug 部分.. 或仅使用xdebug_info()获取该信息。 2) 使用 Xdebug 日志查看 Xdebug 发生了什么。 3)看看在你的PHP代码(程序断点)中添加xdebug_break();是否会有所作为。