我正在运行Node.jsv19.2.0,并尝试使用检查器客户端来调试我的程序。
我创建了一个非常小的脚本。它只抛出一个异常,没有其他任何东西:
throw new Error("err");
我把这两个都保存为
test.js
(CommonJS脚本),以及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脚本中的行为相同?
1条答案
按热度按时间xesrikrc1#
您的调试工具可能未正确设定为行程ES模块中掷回的例外状况。您所遇到的行为可能是因为CommonJS和ES模块中行程例外状况的方式不同。在CommonJS中,例外状况会自动拦截并传播,而在ES模块中,例外状况必须使用try-catch区块明确拦截。
要使用调试器调试ES模块脚本,可能需要将抛出异常的代码 Package 在try-catch块中,如下所示:
然后,您可以在catch区块上设定中断点,并在拦截到错误时使用调试工具来检查错误。这应该可以让调试工具在ES模块指令码中掷回的例外状况上适当中断。
或者,您也可以将调试工具设定为在所有例外状况上中断,不论是否拦截到例外状况。请指涉调试工具的文件,以了解如何执行这项作业。