【问题标题】:VS-Code won't pause debugger on exception inside PromiseVS-Code 不会因 Promise 中的异常而暂停调试器
【发布时间】:2017-10-27 12:18:25
【问题描述】:

请考虑以下代码:

new Promise((resolve, reject) => {
   breaksomething() //won't pause
})
breaksomething() //pause as expected!

我希望我的调试器在promise 内的breaksomething() 行中停止执行——因为一个未定义的函数……但是我只得到以下错误输出:

"ReferenceError: breaksomething is not defined"

(没有停顿)。当遇到异常时,调试器在其他任何地方都按预期暂停,问题仅在 Promise 范围内。我确实在断点下勾选了 All ExceptionsUncaught Exceptions

我正在使用:
Visual Studio Code 1.17.2
节点 8.8.1
Inspector 调试器

【问题讨论】:

  • 你在哪里为breaksomething()添加定义?
  • 没有定义 - 我想创建一个例外。
  • 似乎发生这种情况是因为 Promise 是在本机库中实现的,并且函数的调用发生在该本机库中。异常被发送回那里,因此没有被 VSC 捕获

标签: javascript node.js debugging promise visual-studio-code


【解决方案1】:

更新 根据 Microsoft 团队的 latest update on a known issue,这是 VS 代码中的一个已知问题。

您必须在 VS 代码的断点设置中取消选中 All ExceptionsUncaught Exceptions 才能使其正常工作

【讨论】:

  • 这是不正确的。 1)该链接没有指出 VS Code 中的任何问题 - 它只是对如何不中断异常的解释 2)您附加的图像有一个断点。无论异常标记如何,断点都会被命中并停止执行。
  • @Pierre 到今天为止,这是我能为您的问题找到的唯一解决方案。
  • 你对这个问题有什么不明白 - 这不是一个解决方案!您正在向我展示如何在断点处停止调试器!这不是问题 - 问题是在异常时停止调试器。
【解决方案2】:

调试后我发现这是因为 Promise 库是在 Native 代码中实现的

所以当你创建一个 Promise 时,里面的函数实际上是被 Native 代码调用的,异常又回到了它上面。这可能是 VS 调试器无法捕获的原因之一。

这不可能吗?来自 JetBrains 的 WebStorm 也能够打破此类异常。现在他们是如何做到的以及为什么 VS Code 不能做到这一点,超出了我的理解。最好打开一个针对 VS 代码的问题并让 WebStorm 做到这一点。因此,技术上可以打破此类异常

【讨论】:

  • 这对我来说听起来不正确,但如果你想尝试 - 试试 bluebird。我想指出我之前已经成功地从 vscode 调试过(但我不知道是什么导致了你的问题或者如何解决它,抱歉)。
  • @BenjaminGruenbaum,这与调试问题无关。这是关于异常的自动断点
【解决方案3】:

我仍然不清楚为什么会发生此问题,但我找到了解决方法。只需安装 bluebird 并在您的应用程序的初始化代码中添加以下内容:

global.Promise = require("bluebird");  

...这将覆盖默认的nodejs Promise,并在勾选“所有异常”时按预期中断

【讨论】:

    猜你喜欢
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    相关资源
    最近更新 更多