调试Node.js ES模块:调试器在未捕获异常时不中断

0g0grzrc  于 2022-12-12  发布在  Node.js
关注(0)|答案(1)|浏览(103)

我正在运行Node.jsv19.2.0,并尝试使用检查器客户端来调试我的程序。
我创建了一个非常小的脚本。它只抛出一个异常,没有其他任何东西:

throw new Error("err");

我把这两个都保存为

  1. test.js(CommonJS脚本),以及
  2. test.mjs(ES模块)。
    然后我试着用调试器运行它们。我试了三个:node inspect,Chrome的检查器和VSCode调试器。
    1.使用CommonJS脚本,调试器在抛出异常时中断。

1.使用ES模块,调试器在抛出异常时不会中断,而是在node:internal/modules/esm/module_job:194处中断,执行try-catch语句中的await this.module.evaluate(timeout, breakOnSigint);行。

是否每个人都有相同的体验,或者这是我的设置的问题?这是已知问题吗?
如何使调试器在ES模块中的行为与在CommonJS脚本中的行为相同?

xesrikrc

xesrikrc1#

您的调试工具可能未正确设定为行程ES模块中掷回的例外状况。您所遇到的行为可能是因为CommonJS和ES模块中行程例外状况的方式不同。在CommonJS中,例外状况会自动拦截并传播,而在ES模块中,例外状况必须使用try-catch区块明确拦截。
要使用调试器调试ES模块脚本,可能需要将抛出异常的代码 Package 在try-catch块中,如下所示:

try {
    throw new Error("error");
} catch (err) {
    // Handle the error here
}

然后,您可以在catch区块上设定中断点,并在拦截到错误时使用调试工具来检查错误。这应该可以让调试工具在ES模块指令码中掷回的例外状况上适当中断。
或者,您也可以将调试工具设定为在所有例外状况上中断,不论是否拦截到例外状况。请指涉调试工具的文件,以了解如何执行这项作业。

相关问题