VSCODE 中的 PHP 7 Xdebug:如何忽略异常

Posted

技术标签:

【中文标题】VSCODE 中的 PHP 7 Xdebug:如何忽略异常【英文标题】:PHP 7 Xdebug in VSCODE: how to ignore exceptions 【发布时间】:2019-01-16 09:40:56 【问题描述】:

我在 Visual Studio Code 中使用插件 php Debugger 来调试 PHP 代码。 PHP

发生了异常。已弃用:同名的方法 在 PHP 的未来版本中,它们的类将不再是构造函数; RecurringType 有一个不推荐使用的构造函数

或者

发生了异常。警告:AntlrLexer::matchAny() 的声明 应该兼容 BaseRecognizer::matchAny($input)

或者

发生了异常。注意:试图获取非对象的属性

这些异常是由框架生成的,所以我无法全部修复,我只想跳过所有这些异常并跳转到我的断点。

我怎样才能做到这一点? 谢谢。

【问题讨论】:

框架正在使用 PHP 7? @KhoaTruongDinh Ofcouse。这是 vTiger 7.1.0 【参考方案1】:

我不知道这是否适用于您的配置(我在 WordPress 中使用 PHP 7.2),并且发现这可以防止 XDebug 触发每个异常、警告、通知等,如果我只想单步执行我自己的代码部分。

首先,取消选中 Breakpoints 调试部分中的所有内容(包括 Everything,如果选中):

然后将鼠标悬停在Breakpoints 栏上并点击+

现在添加您要调试的函数的名称:

最后,在该函数中设置断点。您现在只能在该函数内触发 XDebug 单步执行:

您可以根据需要添加任意数量的自己的函数断点。有趣的是,如果您有多个同名函数,则只需添加一次函数名。

【讨论】:

工作就像一个魅力。谢谢 谢谢。我的问题是自动检查了 Everything 行,然后它卡住了数千条通知和框架警告:)【参考方案2】:

在我的情况下,扩展程序或编辑器默认检查了所有选项。取消选中所有复选框解决了这个问题。

【讨论】:

【参考方案3】:

问题

听起来您使用的框架是在考虑 PHP 7 之前的版本编写的。错误处理有changed,现在一个未处理的异常或Throwable 实例,更准确地说,将冒泡到使用set_exception_handler() 函数定义的异常处理函数。更大的问题是 FATAL ERROR 意味着 砰砰,进程已死,调试器无法绑定任何东西。

PHP 7 改变了 PHP 报告大多数错误的方式。不再通过 PHP 5 使用的传统错误报告机制来报告错误,现在大多数错误都是通过抛出 Error exceptions 来报告的。

与正常异常一样,这些错误异常会冒泡,直到它们到达第一个匹配的 catch 块。如果没有匹配的块,那么任何使用 set_exception_handler() 安装的默认异常处理程序都将被调用,如果没有默认异常处理程序,则异常将被转换为致命错误,并像传统错误一样处理。

由于 Error 层次结构不继承自 Exception,因此 PHP 5 中使用 catch (Exception $e) ... 块处理未捕获异常的代码会发现这些错误不会被这些块捕获。需要 catch (Error $e) ... 块或 set_exception_handler() 处理程序>。


解决方案

那么,您如何跳过所有这些错误(正在转换为致命错误并停止执行)并让它到达您的断点?通过使用set_exception_handler() 定义错误处理程序。

在您的框架引导代码中注入类似的内容。一定要寻找框架可能会覆盖它的任何地方。

function ignore_exceptions_handler($exception) 
   // Do nothing here


set_exception_handler('ignore_exceptions_handler');

参考:http://php.net/manual/en/function.set-exception-handler.php


更多详情

那么为什么会这样呢?它与 Visual Studio 或调试器无关。 PHP 7 只是比以前的版本(即

这里还有一些有趣的东西:https://docs.devsense.com/en/debugging/exceptions

【讨论】:

以上是关于VSCODE 中的 PHP 7 Xdebug:如何忽略异常的主要内容,如果未能解决你的问题,请参考以下文章

VSCode Xdebug断点调试PHP

Xdebug V3 不会停止 VSCode 中的断点

vscode调试php

vscode使用xdebug断点调试php代码

VSCode中设置断点调试PHP

vscode增加xdebug扩展