【问题标题】:PHP 7 Xdebug in VSCODE: how to ignore exceptionsVSCODE 中的 PHP 7 Xdebug:如何忽略异常
【发布时间】: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

标签: php exception visual-studio-code xdebug


【解决方案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

    【讨论】:

      猜你喜欢
      • 2014-01-05
      • 2016-11-01
      • 2019-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      相关资源
      最近更新 更多