为了账号安全,请及时绑定邮箱和手机立即绑定

如何设置 VSCode、PHP 调试和 XDebug (Windows 10)

如何设置 VSCode、PHP 调试和 XDebug (Windows 10)

PHP
守着星空守着你 2022-10-22 15:19:33
我想使用 VSCode 的“PHP Debug”插件和 Xdebug 来调试 PHP 脚本。但是当我选择“调试|开始调试 F5”时,会出现小调试弹出窗口,我被卡住了。暂停、重新启动、停止按钮处于活动状态。Step over, into, out 按钮处于非活动状态(灰显)。调试控制台中没有任何反应。(1) 安装VSCode 1.42.1(2) XAMPP v3.2.4 启动并运行(3) 使用向导安装 Xdebug 并粘贴我的 phpinfo() 数据以确定正确的版本。当我从 XAMPP 控制面板启动 'admin' 并查看 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 = 1xdebug.remote_autostart = 1xdebug.show_local_vars = 1xdebug.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但是当我使用“调试|开始调试 F5”时,xdebug.log 中没有任何反应。到目前为止,这就是我认为相关的所有信息。这让我像这样:me -> update_status("at wit's end")你们那里的巫师知道在哪里挖吗?要调整哪个配置文件?要查阅哪个日志文件?脚注:在 VSCode 中调试 Python 脚本的工作与预期一样。
查看完整描述

3 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

长话短说(如何检查 VSCode 是否正在侦听端口 9000)

启动 XAMPP,启动 VSCode

打开你的 php 脚本

设置断点

打开一个 Linux shell(我在 Windows 上的 Ubuntu 上使用 Bash)

在shell中运行telnet 0.0.0.0 9000或telnet localhost 9000观察连接失败

root ~ $ telnet localhost 9000 

Trying 127.0.0.1... 

telnet: Unable to connect to remote host: Connection refused 

root ~ $ telnet 0.0.0.0 9000

Trying 0.0.0.0... 

telnet: Unable to connect to remote host: Connection refused

开始调试并看到如上所述的冻结调试弹出窗口

运行telnet 0.0.0.0 9000或telnet localhost 9000在 shell 中运行并注意区别:您已连接到 VScode!

root ~ $ telnet 0.0.0.0 9000 

Trying 0.0.0.0... 

Connected to 0.0.0.0.

Escape character is '^]'.

单击冻结的调试弹出窗口上的停止按钮并在外壳中观察

stop -i 1 Connection closed by foreign host.

root ~ $ 

得出结论,VSCode 确实在监听 0.0.0.0:9000 和 localhost:9000。


挠头,回到 VSCode

开始调试

注意底部的橙色状态栏,上面写着“Listen to XDebug”

注意菜单栏下方的下拉菜单,上面写着“绿色箭头”和“监听 XDebug”

探索下拉菜单并(重新)发现第二个配置“启动当前打开的脚本”,意识到/记住您launch.json有 2 个配置

选择“启动当前打开的脚本”时单击绿色箭头,看到错误弹出“listen EARDRINUSE: address already in use :::9000”

取消错误提示,点击调试弹窗的停止按钮停止调试,注意底部菜单栏变为蓝色

当下拉菜单中再次显示“启动当前打开的脚本”时单击绿色箭头...并注意调试按预期开始

麾!赞扬@LazyOne 的帮助!感谢上天赐予 stackoverflow 社区!

“Listen for XDebug”配置launch.json用于调试从浏览器会话启动的脚本:(i)在 VSCode 中设置断点,(ii)使用“Listen for XDebug”配置开始调试,(iii)启动脚本通过在浏览器中发起请求,(iv) 观察 VSCode 是否在处理请求时触发断点


短篇故事

当您开始在 VSCode 中调试 php 脚本时,请确保选择“启动当前打开的脚本”作为配置,请参见下面的屏幕截图。

//img1.sycdn.imooc.com//635399bd0001276207370207.jpg

事后诸葛亮

我已经改变launch.json了


"configurations": [

    {

        "name": "Launch currently open script",

        "type": "php",

        "request": "launch",

        "program": "${file}",

        "cwd": "${fileDirname}",

        "port": 9000

    },

    {

        "name": "Listen for XDebug",

        "type": "php",

        "request": "launch",

        "port": 9000

    }

]

这样,“启动当前打开的脚本”是默认设置,当我使用主菜单中的“调试|开始调试 F5”开始调试时将使用该脚本。


查看完整回答
反对 回复 2022-10-22
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

launch.json(默认配置):


{

"version": "0.2.0",

"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,

    }


]}

在 php.ini 中包含指令 xdebug.idkey=VSCODE 是绝对必要的,即使我在文档中没有找到对它的任何引用。


[xDebug]

zend_extension="c:\xampp\php\ext\php_xdebug-2.9.8-7.3-vc15-x86_64.dll"

xdebug.remote_enable=1

xdebug.remote_autostart=1

xdebug.remote_connect_back=1

xdebug.remote_port=9000

xdebug.idekey=VSCODE


查看完整回答
反对 回复 2022-10-22
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

我刚刚遇到了这个问题,我试图听 XDebug,但当我尝试按 F5 或运行/调试时什么也没发生......

事实证明,我的工作区中添加了一些幻像文件夹(我一直在使用一些升级工具为我正在处理的应用程序运行一堆测试,所以我猜这就是它的来源?)。

为了能够再次“运行”调试过程,我需要从工作区中删除那个“额外”文件夹。希望这可以帮助遇到类似问题的其他人(不像我那样愚蠢)。


查看完整回答
反对 回复 2022-10-22
  • 3 回答
  • 0 关注
  • 199 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信