【问题标题】:How to debug node js app with breakpoints and everything?如何使用断点和所有东西调试节点 js 应用程序?
【发布时间】:2012-07-21 14:35:34
【问题描述】:

我安装了 node-inspector 只是为了发现它不支持断点:|这有什么意义呢,记住在很大程度上节点代码是异步的,你根本无法一步一步地遵循它?..

我肯定在这里错过了一点......

无论如何要调试带有断点和所有东西的节点代码?

【问题讨论】:

  • 我从那里来到这里 - 断点在节点检查器中不起作用,我的问题没有答案。有吗?
  • 它确实支持断点。当您参考检查器页面时,我只是不“记住”它们。
  • 近来调试 node.js 应用程序变得更好了。所以这个问题和答案可能不再是实际的了。

标签: debugging node.js v8 node-inspector


【解决方案1】:

是的,我已经成功使用了节点检查器。如果您想要永久断点,只需在代码中插入debugger;。见http://nodejs.org/api/debugger.html

使用node --inspect-brk script.js(以前的node --debug-brk script.js)让节点等待调试器附加,也很有帮助。

【讨论】:

  • 带调试器;它崩溃:节点(31848,0x7fff70e12cc0)malloc:***对象0x10010f690的错误:未分配指针被释放***在malloc_error_break中设置断点以调试中止陷阱
  • 我从未见过这个错误,抱歉。您的应用程序的进程是否崩溃,或者它是节点检查器?您正在运行哪些版本?您是否使用了任何可能崩溃的本机节点模块?
  • 对于更高版本的 Node.js,--debug-brk 已弃用。请改用--inspect-brk
【解决方案2】:

(适用于 Node 8 及更高版本)

Node.js 有一个内置的调试器。通常你可以通过两种方式开启调试器:

  1. 使用--inspect--inspect-brk 开关启动您的Node.js 应用程序或脚本。例如:

    $ node.js --inspect index.js

(注意:--inspect-brk 在用户代码开始前中断)

  1. 如果由于某种原因您无法使用 --inspect 开关启动 Node.js 应用程序或脚本,您仍然可以通过使用 SIGUSR1 发出信号来指示 Node.js 进程开始侦听调试消息(在 Linux 和 OS X 上) )。对于 Node 8 及更高版本,它将激活 Inspector API,与 --inspect 开关相同

    $ kill -sigusr1 23485

(注意:需要将23485替换为自己的Node.js进程ID)

打开调试器后,可以打开谷歌Chrome浏览器,在地址栏输入chrome://inspect

然后您应该会在“远程目标”下看到一个条目。继续并点击“检查”。

现在您可以设置断点并开始调试代码了。

参考:

  1. https://nodejs.org/en/docs/guides/debugging-getting-started/
  2. stackoverflow 的相关问题: Chrome Devtools Dedicated Node.js Inspector not stopping at breakpoints

【讨论】:

【解决方案3】:

调试 Node.js 应用程序,可以使用调试内置方法:

(1) 在要插入断点的位置插入debugger; 语句
(2) 使用命令$ node inspect <file name>运行文件
(3) 使用key例如c继续下一个断点

您甚至可以通过键入repl 来调试与该断点处的变量关联的值。更多信息,请查看official guide.

【讨论】:

  • 测试于v10.15.1
  • 如果不想修改代码,可以使用setBreakpointsb函数设置断点,如setBreakpoint('script.js', 1)(nodejs.org/api/debugger.html)
【解决方案4】:

您是否尝试过使用nodemon 库? it can be found here.

出于开发目的,您可以启动运行 nodemon 的应用程序。我有这个脚本:

"dev": "nodemon --inspect src/index.js"

只要在代码中到达debugger 语句,它就会中断。要打开可以看到服务器代码的控制台,请在 chrome 中打开控制台并单击 nodejs 图标:

它还可以帮助您每次在服务器上保存任何文件时刷新服务器。

让我知道它是否有效!

【讨论】:

    【解决方案5】:

    这里稍微详细说明一下:

    在您希望断点所在的任何位置设置调试器,然后使用 node debug script.js/index.js 运行您的代码

    当调试器在你的断点处停止时,你需要 repl 来检查变量。

    【讨论】:

    • 我想要一个异常发生的地方的断点(假设我提前不知道它会在哪里)。我该怎么做?
    • 您可以不使用 REPL 命令添加运行时观察程序,只需键入 for ex。 watch('count') watchers api 将在调试器在该函数中停止时打印该值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 2014-04-04
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多