我们如何让 XDebug VSCode 忽略已知的代码问题?

How do we get VSCode with XDebug to ignore known code issues?

环境:Visual Studio 代码,PHP 7.4,XDebug,Flywheel 本地的 WordPress 站点,全部在 Windows 10 上。这一切正常。问题是 WordPress 中总是出现一个未处理的小异常,在正常处理中会被忽略。但是异常报告使我的插件调试变得混乱。所以我想消除一小部分 WP 核心代码的 XDebug 报告。

在 index.php 中,我添加了以下无效的内容:

xdebug_set_filter(
    XDEBUG_FILTER_STACK,
    XDEBUG_PATH_INCLUDE,
    [__DIR__ . "/wp-content/plugins/myplugin/"]
);

我在wp-load.php中添加了类似的代码,也没有效果:

$path=__DIR__ . "\wp-content\plugins\myplugin";
xdebug_set_filter(
    XDEBUG_FILTER_STACK,
    XDEBUG_PATH_INCLUDE,
    [$path]
);

$path 正确。

在 WP 核心代码 (wp-db.php) 中,我将异常抛出代码括起来:

xdebug_disable(); ... xdebug_enable();

令人困惑的一件事是 VS Code 智能感知无法识别 xdebug 函数,但仍使用 xdebug_break();确实会导致 XDebug 中断。

是的,UI 显示错误“调用未定义的函数 xdebug_disable()”。因此,除了获得 IDE 支持外:

(更具体地说,对于此环境,这是“C:\Users\me\AppData\Roaming\Local\lightning-services\php-7.4.1+16\bin\win64\ext\php_xdebug-3.0.4-7.4-vc15-nts-x86_64.dll”)

对于这个特定的挑战:

我们用括号 enable/disable 吗?
我们是否使用 xdebug_set_filter 仅关注感兴趣的命名空间或文件夹?
我们会用这样的括号吗? :

xdebug_start_error_collection();
...
xdebug_stop_error_collection();
xdebug_get_collected_errors(true);

最后,因为我想了解它是如何工作的,而不仅仅是获得这个特定挑战的答案:

谢谢。

你的大部分问题似乎来自对 Xdebug 2 的了解,但使用 Xdebug 3,它有一组更改的配置设置和功能,这些设置和功能记录在 upgrade guide.

Question 1: Call to undefined function xdebug_disable()

这是因为Xdebug 3已经没有这个功能了,见:https://xdebug.org/docs/upgrade_guide#Changes-to-Functions

Question 2: What do we do to get a VSCode project/workspace to recognize the php_xdebug.dll features?

它已经这样做了,因为 xdebug_break() 适合您。你只是在使用旧版本的功能。

Question 3: What is the proper technique to get XDebug to avoid a specific code block?

Xdebug 无法进行调试。它通常内置于 IDE 中。例如,PhpStorm 有一种排除目录的方法。我对 VS Code 插件不是 100% 满意,但他们最近进行了更改,默认情况下不启用 default exception filters,这也可以解决您的问题。

Do we bracket with enable/disable?

没有。该函数不再存在,但它的唯一作用是显示或不显示 Xdebug 的橙色错误。它对调试没有任何影响。

Do we use xdebug_set_filter to focus on just the namespace or folders of interest?

过滤器有两类,一类用于堆栈跟踪(XDEBUG_FILTER_STACK),一类用于代码覆盖率(XDEBUG_FILTER_COVERAGE)。还有 none 用于调试,我已经创建了一个 feature request 来支持它(来自 Xdebug 3.1)。

Do we bracket with something like this? :

xdebug_start_error_collection();
...
xdebug_stop_error_collection();
xdebug_get_collected_errors(true);

那只是为了收集错误。它不会阻止 错误的发生。

Question 4: Where can we find documentation about how to use these functions to solve actual problems, outside of the great syntax docs provided at https://xdebug.org/docs/develop ?

我将从 upgrade guide 开始,并查看最近重写的 step 调试器文档。我最近还开始制作有关文档特定内容的视频,其中一些是关于 步骤调试 ,还有一个 完整列表

我还在添加这些视频,也会添加非视频内容。 如果您想对这些视频提出具体想法,请在 Xdebug 的 bug tracker.

中发送文档问题