52

当我使用 时--nolazy,我终于可以使用 IntelliJ 进行异步调试,因为断点会停在正确的位置。--nolazy但是我在...上找不到任何文档

是什么--nolazy意思?

4

5 回答 5

86

让任何人知道,如果您调试节点 js(尤其是远程调试)并使用您必须使用的异步类型编码,因为这是节点的本质,您将使用 -nolazy 标志运行节点

node --nolazy --debug-brk sample1.js

这将强制 V8 引擎对代码进行完整编译,从而与 IntelliJ 和 WebStorm 一起正常工作,这样您就可以在代码中正确放置断点,而不必使用 ;debugger; v8 查找的字符串...

希望这对某人有所帮助,当然对我有所帮助:)

肖恩。

于 2014-02-04T18:01:34.450 回答
12

正如其他人所说,您可以看到 v8 的命令行选项

node --v8-options

在那里,您可以看到以下列表--lazy

--lazy (use lazy compilation)
      type: bool  default: true

v8 使用一种相当常见的方式来描述布尔值 - 在标志前面加上no设置为 false,并仅使用标志设置为 true。所以--nolazylazy标志设置为假。

注意:node使用稍微不同的约定 - 在那里,您使用no-前缀(注意破折号)将 bools 设置为 false。例如,--no-deprecationnode一面旗帜。

于 2014-02-03T19:23:25.030 回答
12

参考: https ://vscode-docs.readthedocs.io/en/stable/editor/debugging/

出于性能原因,Node.js 在首次访问时会延迟解析 JavaScript 文件中的函数。因此,断点在 Node.js 没有看到(解析)的源代码区域中不起作用。

由于这种行为不适合调试,VS Code 会自动将 --nolazy 选项传递给 Node.js。这可以防止延迟解析并确保可以在运行代码之前验证断点(因此它们不再“跳转”)。

由于 --nolazy 选项可能会显着增加调试目标的启动时间,您可以通过传递 --lazy 作为 runtimeArgs 属性轻松选择退出。

于 2018-08-05T23:54:50.550 回答
2
  • 问题:当你想在IDE中设置断点来调试js代码时nodejs,有些breakpoints不起作用。

  • 原因:在启动时,节点延迟解析代码,这意味着它没有看到完整的代码。所以它看不到所有的断点。

  • 解决方案:使用--no-lazy选项来关闭节点的惰性行为。

(ps:我尽量解释得通俗易懂,可能不太准确。)

于 2020-06-21T17:02:23.187 回答
0

node --v8-options

它会显示所有可用的标志。

顺便说一句:我为你找到的最接近的标志是

--lazy

意思是懒惰编译,我相信这个名字很明显

于 2014-02-03T18:31:14.863 回答