【问题标题】:How to PROPERLY debug node.js with node inspector?如何使用节点检查器正确调试 node.js?
【发布时间】:2012-02-11 13:35:36
【问题描述】:

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

  1. 我的断点在我重新启动服务器后永远不会保存
  2. 我无法在尚未加载的文件上设置断点;所以我必须从第一个脚本进入我想要的脚本;真的很痛苦!

您如何使用节点检查器真正调试 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

编辑:

没有人能回答这个问题吗? :s

【问题讨论】:

  • 1 和 2 都是对节点检查器的有效投诉。还有其他调试方法、Eclipse 插件或使用node --debug 以及使用debugger; 在代码中放置断点。
  • 我尝试过使用 eclipse,但经过 1 周多的尝试后我放弃了。现在我遇到了 Sublime Text 2,它确实比我使用的 eclipse 好得多。我将搜索是否存在任何 sublime 文本的调试器
  • @Totty:你找到 sublime 的调试器了吗?
  • 不,我仍然使用节点检查器。非常慢,所以我尽可能使用 console.log。真的是node.js的痛点

标签: debugging node.js


【解决方案1】:

在 javascript 中,您可以使用 debugger; 语句设置断点。但是,只有在实际附加了调试器时,它们才会暂停节点。

所以使用

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

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

(如 cmets 中所述:在最新版本的 node 中,您不再需要单独安装 node-inspector。如果您使用 node --debug-brk --inspect myfile.js 启动 node,您将获得一个在浏览器中启动调试器的 url)。

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

如果您的断点没有自动命中,但只有在某些用户操作之后,您当然不需要--debug-brk

【讨论】:

  • 我设法使用这些步骤使断点工作。
  • 我用$ node --inspect --debug-brk myfile.js
  • +1 表示@troyd 的回答; --inspect --debug-brk 标志组合应该打印出一个链接,您可以将其粘贴到浏览器中以查看开发工具
  • v8.9.0 已弃用。
【解决方案2】:

这是现在内置的包括保存断点。我刚刚在节点 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

【讨论】:

【解决方案3】:

另外值得注意.. vscode 有一个很棒的 node 调试器。

https://code.visualstudio.com/

适用于 Mac、Linux 和 Windows。

它执行运行时断点(无需编写调试器;语句), 支持可变手表,甚至还有一个调用堆栈窗口(非常好)。

一切都如此自动化,现在我在使用 nodejs 时转到了 sublime 文本(我喜欢 sublime)。

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

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

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

      编辑:但是,根据v8 DebuggerProtocol,可以在尚未加载的脚本上设置断点,并且可以通过函数、脚本等设置断点。因此,节点检查器应该可以跟踪您的断点(在会话中或其他)。不过,它现在不这样做。

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

      【讨论】:

      • 内部调试器的便捷链接 - 我想知道我将如何做到这一点。
      • 其实我是用来放置调试器的;声明和 v8 确实按预期打破了它们。
      • 同事刚刚在这个答案中发现了我的名字。在附加节点检查器之前,Node.js 是否有可能超过 debugger;?我很确定 V8 会忽略断点和debugger;,除非连接了调试客户端。使用 --debug-brk 可能会更好,它会告诉 V8 立即中断,从而有时间附加节点检查器。
      • @RyanOlds 你是对的,它显然已经通过了调试器;调试器连接之前的语句。我会更新我的答案。
      【解决方案6】:

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

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

      【讨论】:

        【解决方案7】:

        尝试使用 IntelliJ WebStorm - 有免费试用版,而且许可证价格也不会贵得离谱。它允许您在启动自己的内部节点进程之前在所有文件中保存断点,并在进程重新启动时记住它们。

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

        忘记断点非常没有帮助...我的大多数调试运行都需要不止一次的演练,因为在其他人的代码中很容易越过你想要的位置。

        【讨论】:

        • node-inspector 有一个优点。它可以浏览 Closure 包含的文件 (goog.provide/goog.require),而 WebStorm 的调试器不能。顺便说一句,现在节点检查器可以保存断点,请参阅我的答案。
        猜你喜欢
        • 2013-12-17
        • 2014-04-04
        • 2014-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-11
        • 2015-06-18
        相关资源
        最近更新 更多