如何使用节点检查器正确调试node.js?

时间:2012-01-16 16:20:28

标签: debugging node.js

我有一个内置于node.js的应用程序,我使用节点检查器进行调试。 但由于这个原因,这很难:

  1. 我重启服务器后,我的断点永远不会保存
  2. 我不能在尚未加载的文件上放置断点;所以我必须从第一个脚本进入我想要的脚本;非常痛苦!
  3. 如何使用节点检查器真正调试node.js?

    关于如何使用node.js的视频非常具有误导性,因为一切都在模块中...... http://www.youtube.com/watch?v=AOnK3NVnxL8

    脚本出现的

    或者这个脚本已经加载到第一个脚本中了 http://www.youtube.com/watch?v=HJOH0-g8f6E&feature=mfu_in_order&list=UL

    编辑:

    没人能回答这个问题? :■

7 个答案:

答案 0 :(得分:26)

在javascript中,您可以使用debugger;语句设置断点。但是,如果实际连接了调试器,它们只会暂停节点。

所以使用

启动节点脚本
node --debug-brk myfile.js

然后启动node-inspector并按下播放按钮继续到下一个断点,它将点击你的debugger;断点(至少那对我有用)

(如评论中所述:在最近版本的节点中,您不再需要单独安装node-inspector。如果使用node --debug-brk --inspect myfile.js启动节点,则会获得一个在浏览器中启动调试器的URL )。

重新启动后仍然需要额外点击一次,但至少保存了断点。

如果您的断点没有自动点击,但只有在用户采取一些操作后,您当然不需要--debug-brk

答案 1 :(得分:6)

客户端断点的问题在于,当文件更改时很难跟踪断点位置。与编辑器不同,它无法跟踪正在更改的行等。

@RyanOlds建议使用调试器;语句也是一个好的语句,但您必须确保在评估语句之前连接调试器,否则将忽略它。从--debug-brk开始是一种强制执行此操作的好方法,因为执行在第一行暂停,允许您附加调试器然后继续执行。

您可以尝试使用节点internal debugger进行调试。

编辑:但是,根据v8 DebuggerProtocol,可以在尚未加载的脚本上设置断点,并且可以按功能,脚本等设置断点。因此,节点检查器应该可以跟踪您的断点(在会话中或其他任何情况)。但是现在它没有这样做。

也许如果v8允许某段代码触发断点,类似于节点 debugger ? 编辑:确实如此,您应该能够通过抛出任何旧的异常(捕获或未捕获)来触发休息。

答案 2 :(得分:5)

节点检查器的新版本(0.3.x)将断点保存在浏览器的本地存储中并自动恢复它们。

https://github.com/node-inspector/node-inspector/pull/116

答案 3 :(得分:1)

尝试使用IntelliJ WebStorm - 有一个免费试用版,许可证并不是非常昂贵。它允许您在启动自己的内部节点进程之前在所有文件中保存断点,并在进程重新启动时记住这些断点。

我同意 - node-inspector看起来非常棒,但除非你的应用程序在你的源文件加载之后有一个明确的位置在顶级脚本中设置断点,但是在你想要调试的区域之前是没用的。您可以通过这种方式构建自己的代码,但是如果想要包含其他有用的库,则不会如此幸运。另外......为什么调试工具会决定你的项目结构!

忘记断点是非常无益的...我的大多数调试都需要多次演练,因为在其他人的代码中,很容易超越你想要的位置。

答案 4 :(得分:1)

您可以使用node-codein进行检查。它不会执行运行时断点,但它应该简化检查过程。

https://github.com/ketamynx/node-codein/

答案 5 :(得分:0)

另外值得注意的是..vscode有一个很好的节点调试器。

https://code.visualstudio.com/

可在Mac,Linux和&视窗。

它执行运行时断点(不需要编写调试器;语句), 支持变量监视,甚至有一个调用堆栈窗口(非常好)。

所有东西都是如此自动化,现在我在使用nodejs(并且我喜欢崇高)时可以使用崇高文本。

答案 6 :(得分:0)

现在内置,包括保存断点。我刚刚在节点7.3.0中测试过它。

node --inspect --debug-brk app.js

这会打印一个这样的网址

To start debugging, open the following URL in Chrome: chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9229/c3d5d93e-9d27-41b9-a4da-607e43c9d4f8

把它放在Chrome中,你很高兴。

如果您想跳过复制/粘贴网址,请执行以下操作:

npm install -g inspect-process inspect --debug-brk app.js

不幸的是inspect-process方法没有保留断点: - (。

以下是我制作的视频:https://youtu.be/rtZKUnks6jI