使用 node-inspector 调试 node.js

Posted

技术标签:

【中文标题】使用 node-inspector 调试 node.js【英文标题】:debugging node.js with node-inspector 【发布时间】:2014-06-13 23:49:05 【问题描述】:

我正在尝试使用 node-inspector 调试我的 nodejs 应用程序。但谷歌浏览器不显示代码。

我正在使用以下,

Node.js:v0.10.26

快递:4.0.0

节点检查器:v0.7.3

谷歌浏览器版本:34.0.1847.131

这就是我正在做的启动调试器..

$ node-inspector
Node Inspector v0.7.3
Visit http://127.0.0.1:8080/debug?port=5858 to start debugging.

在另一个控制台中,

$ node --debug app.js 
debugger listening on port 5858
$

然后启动谷歌浏览器并转到

http://127.0.0.1:8080/debug?port=5858

它打开节点检查器但没有任何代码..所有窗口都是空的。

注意到我没有收到“Express server 监听端口 3000”

按照node-inspector fails to connect to node 尝试了所有方法,但没有成功

无法弄清楚我缺少什么。如果你有任何建议,我会很高兴。所以我可以在 Google Chrome 中调试我的 Node.js 应用程序。

【问题讨论】:

1.尝试使用 --no-preload 选项运行节点检查器。 2.检查 Chrome 的 DevTools 控制台 - 是否有任何错误? 【参考方案1】:

在节点检查器的左侧,“源”选项卡,有“一个带有三角形的框” - 突出显示“显示导航器”。 (见上图)。打开它以找到您要调试的文件,并在尚未运行的代码上放置一个断点。

另外请注意,如果您想调试在启动节点上运行的代码,您需要在启动时使用--debug-brk 选项。然后,在 Node Inspector 中,您必须启动应用程序(F8 运行所有应用程序)。如果要调试所有初始化代码,例如启动 Web 浏览器,则需要此选项。

【讨论】:

感谢 Clay,--debug-brk 似乎奏效了..虽然最初没有奏效..但尝试了几次之后..确实奏效了..【参考方案2】:

尝试运行node --debug-brk app.js 而不仅仅是--debug。在节点检查器挂钩到节点进程之前,您的应用程序可能不会暂停。使用--debug-brk 将强制节点在应用程序的第一行中断并等待调试器附加到进程。加载节点检查器 Web 界面是导致节点检查器附加到您的节点进程的原因;这就是为什么在查询字符串中包含节点调试端口(localhost:8080/debug?port=5858)。你是在告诉节点检查器它应该连接到哪个端口。

这是我整理的一个动画 gif,显示了节点检查器的完整安装和运行。

在 gif 中,我使用了 --debug 标志,因为我没有调试任何在启动时运行的代码。我在请求处理程序中进行调试,该处理程序仅在请求页面时触发。因此,刷新页面会导致节点检查器在该行中断。

不久前我还整理了一个 15 分钟的 YouTube 教程。

http://youtu.be/03qGA-GJXjI

希望对你有帮助!

【讨论】:

谢谢亚历克斯,我之前确实看过你的 youtube 视频。非常感谢。 --debug-brk 为我做了伎俩..但是..当我在我的一条路线中放置一个断点时。就我而言,我正在尝试用cheerio + request 来抓取一个网站。我已经创建了一条路线,比如说 scrape.js 我希望调试这个文件..但它没有达到断点..我错过了什么吗? 我不确定。没有代码示例很难知道。您能否粘贴所有运行到在 gist 中声明该路由的代码以及您要导航到的 URL 以触发请求处理程序? @AlexFord:你是如何创建这个 gif 的?我认为它真的很酷,而且很有帮助 @SharpCoder 我用Camtasia 来录制视频。在他们的高级导出选项中,您可以选择动画 gif。 @SutikshanDubey 指的是this answer。当您进入第 3 步时,请确保您使用的是 node-inspector 命令和 not node-debug 命令。 node-debug 命令运行您的脚本 启动节点检查器服务器。您只想启动服务器,而不是启动脚本。然后您可以使用--debug-brk 标志单独启动您的脚本。【参考方案3】:

node-inspector 默认尝试在启动调试窗口之前预加载所有代码。我有实例,节点检查器只是因为这个预加载而永远挂起。幸运的是,较新的版本可以选择停止预加载,从而使检查器加载速度更快。

试试node-inspector --no-preload

【讨论】:

非常有帮助!当我宁愿立即打断点时,我也遇到过这个愚蠢的悬挂问题。感谢您的提示!【参考方案4】:

标准远程调试在节点 6.5 中完全中断。然而,它被一个新的内部节点功能所取代

$ node --inspect --debug-brk build/server/server.js
Debugger listening on port 9229.
Warning: This is an experimental feature and could change at any time.
To start debugging, open the following URL in Chrome:
    chrome-devtools://devtools/remote/serve_file/@62cd277117e6f8ec53e31b1be58290a6f7ab42ef/inspector.html?experiments=true&v8only=true&ws=localhost:9229/node
Debugger attached.

查看这里 - http://arveknudsen.com/?p=346%3Fpage_id%3D346&print=pdf - 了解更多信息

【讨论】:

你刚刚拯救了我的一天!不再需要节点检查器。 嗯,在我的情况下,它给了我一个以“ws://”开头的 URL ...这台机器是一个无头服务器,所以我通过了 host:port 选项,但我仍然可以' t 在我的本地 Chrome 实例中打开“ws://”URL【参考方案5】:

node-debug --no-preload app.js

这对我有用。根据this:

我的脚本运行速度太快,无法附加调试器。

被调试的进程必须以--debug-brk 启动,这样 脚本在第一行暂停。

注意:node-debug 默认为你添加了这个选项。

【讨论】:

【参考方案6】:

--debug-brk 现已弃用

试试node --inspect-brk <your starting file name> 然后转到chrome并输入url chrome://inspect 并点击Open dedicated DevTools for Node, 调试器将启动,不需要节点检查器

【讨论】:

以上是关于使用 node-inspector 调试 node.js的主要内容,如果未能解决你的问题,请参考以下文章

使用node-inspector调试nodejs程序<nodejs>

如何使用 node-inspector 调试 nodeunit

如何使用 node-inspector 调试 nodejs 后端?

使用 node-inspector 调试 nodejs

node-inspector调试报错问题处理

node调试工具--node-inspector安装