如何设置VSCode,PHP Debug和XDebug(Windows 10)

问题描述 投票:0回答:1

我想将VSCode的'PHP Debug'插件与Xdebug一起使用来调试PHP脚本。

但是当我选择“ Debug | Start Debugging F5”时,会出现一个小的调试弹出窗口,我被卡住了。暂停,重新启动,停止按钮处于活动状态。移入,移出,移出按钮无效(变灰)。在调试控制台中什么也没有发生。

已安装((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 = 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)VSCode调试器的launch.json具有

"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脚本的工作符合预期。

php visual-studio-code xampp xdebug
1个回答
0
投票

@@ LazyOne的评论提供了偶然发现解决方案的线索和工具...

答案原来很尴尬。

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

  1. 启动XAMPP,启动VSCode
  2. 打开您的PHP脚本
  3. 设置断点
  4. 打开Linux Shell(我在Windows的Ubuntu上使用Bash)
  5. 在外壳中运行telnet 0.0.0.0 9000telnet 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
  1. 开始调试,并如上所述查看冻结的调试弹出窗口
  2. 在外壳中运行telnet 0.0.0.0 9000telnet localhost 9000并注意区别:您已连接到VScode!
root ~ $ telnet 0.0.0.0 9000 
Trying 0.0.0.0... 
Connected to 0.0.0.0.
Escape character is '^]'.
  1. 单击冻结的调试弹出窗口上的停止按钮并在外壳中进行观察
stop -i 1 Connection closed by foreign host.
root ~ $ 

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

  1. 挠头然后回到VSCode
  2. 开始调试
  3. 请注意底部的橙色状态栏,显示“收听XDebug”
  4. 请注意菜单栏下方的下拉菜单,其中显示“绿色箭头”和“收听XDebug”
  5. 浏览下拉列表并找到第二个配置“启动当前打开的脚本”,请意识到/记住您的launch.json具有2个配置
  6. 选择“启动当前打开的脚本”时,单击绿色箭头,看到一条错误消息,“听EARDRINUSE:地址已在使用中::: 9000”弹出]
  7. 取消错误消息,通过单击调试弹出窗口的停止按钮停止调试,请注意底部的菜单栏变为蓝色
  8. 再次在下拉菜单中显示“启动当前打开的脚本”时,单击绿色箭头...,并且注意,调试将按预期启动
  9. 欢喜!感谢@LazyOne的帮助!感谢天堂为stackoverflow社区!
  10. launch.json中的“ Listen for XDebug”用于调试从浏览器会话启动的脚本:(i)在VSCode中设置断点,(ii)使用“ Listen for XDebug”配置开始调试,( iii)通过在浏览器中发起请求来启动脚本,(iv)如果在处理请求时触发了断点,则观察VSCode

短篇小说

请确保在开始使用VSCode调试php脚本时选择“启动当前打开的脚本”作为配置,请参见下面的屏幕截图。Just to make sure that you know which drop-down I am talking about

事后思考

我将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”开始调试时,将使用该方法。

© www.soinside.com 2019 - 2024. All rights reserved.