XDebug 断点在 Visual Studio Code 中给出 PHP 错误

Posted

技术标签:

【中文标题】XDebug 断点在 Visual Studio Code 中给出 PHP 错误【英文标题】:XDebug breakpoint giving errors with PHP in Visual Studio Code 【发布时间】:2020-07-23 09:36:53 【问题描述】:

我正在尝试使用 XDebug 和 Visual Studio Code 在 php 代码中设置断点,该代码全部安装在 Ubuntu Hyper-V 虚拟机上。我在 PHP 7.2 上。

每当我在我的 PHP 代码中设置断点并刷新应该命中断点的页面时,我都会在 Visual Studio Code 的弹出窗口中看到错误“命令不可用”和“没有这样的断点”。我还在调试控制台中收到以下错误。

XDebugError: command is not available
    at new Response (/home/ben/.vscode/extensions/felixfbecker.php-debug- 
1.13.0/out/xdebugConnection.js:56:19)
    at new BreakpointSetResponse (/home/ben/.vscode/extensions/felixfbecker.php-debug- 
1.13.0/out/xdebugConnection.js:207:9)
    at Connection.<anonymous> (/home/ben/.vscode/extensions/felixfbecker.php-debug 
1.13.0/out/xdebugConnection.js:599:20)
    at Generator.next (<anonymous>)
    at fulfilled (/home/ben/.vscode/extensions/felixfbecker.php-debug-1.13.0/out/xdebugConnection.js:4:58) 
  code: 5,
  name: 'XDebugError'

根据我的研究,我认为问题在于 XDebug 不适用于 IPv6,但调试器正在侦听 v6。如果我做netstat -an | grep 9000,我会得到

tcp6       0      0 :::9000                 :::*                    LISTEN  

这里是/etc/php/7.2/fpm/conf.d/20-xdebug.ini的内容

zend_extension=xdebug.so
xdebug.remote_autostart=1
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_host=127.0.0.1
xdebug.remote_mode=req
xdebug.remote_port=9000
xdebug.var_display_max_depth=-1
xdebug.var_display_max_children=-1
xdebug.var_display_max_data=-1

如何解决这个问题并让我的断点工作?

【问题讨论】:

我的笔记本电脑升级到 Ubuntu 20.04 后开始出现这个问题 你能解决这个问题吗?我也遇到了这个问题,这是工作中的障碍 我也有同样的问题 我也有同样的问题 【参考方案1】:

我使用这些扩展进行调试:

PHP 调试(作者 Robert Lu) PHP Intelephense(作者 Ben Mewburn)

请检查您项目的 XDebug 配置。它是您项目根目录中 .vscode 文件夹中的 launch.json。如果缺少,则必须在 Visual Studio Code 的 Debug 设置中创建(齿轮按钮)。

应该是这样的:


// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"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"
    
]

【讨论】:

我确实创建了一个 Visual Studio Code 配置文件。 @BenRubin 根据您使用扩展程序的错误:PHP Debug (by Felix Becker)。我建议尝试扩展:PHP Debug (by Robert Lu)。如果它不起作用,请告诉我,我们尝试其他方法。【参考方案2】:

这已在 PHP Debug 扩展中修复了一段时间。这是一个讨论它的issue 和一个链接的拉取请求。

由于 Xdebug/DBGp 的“同步”特性和 VS Code 的“异步”特性,当多个 PHP 进程连接到 PHP Debug 时,“add add”、“remove remove”、“ add add”会发生添加和删除断点的过程。 由于这个冲突,扩展程序最终试图删除一个已经被删除的断点,并且出现了这样的——不是很有帮助的——异常。

我正在继续开发 PHP Debug,所以如果您有问题或错误,请在此处提交。

【讨论】:

以上是关于XDebug 断点在 Visual Studio Code 中给出 PHP 错误的主要内容,如果未能解决你的问题,请参考以下文章

Zend Studio集成Xdebug断点调试详解

Visual Studio开发PHP

Visual Studio Code 调试 数组评估

Visual Studio Code IDE + Docker实现PHP Xdebug调试

如何在 Visual Studio 2008 或 Visual Studio 2010 中设置 JavaScript 断点

掌握Visual Studio断点