使用node-inspector调试Node.js

69

我正在尝试使用node-inspector调试我的node.js应用程序,但Google Chrome没有显示代码。

我正在使用以下版本:

Node.js:v0.10.26

Express:4.0.0

Node Inspector:v0.7.3

Google Chrome版本: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

它打开了node-inspector但没有任何代码,所有窗口都是空的。

注意到我没有收到“Express server listening on port 3000”的消息。

尝试按照node-inspector无法连接到node中的所有步骤,但没有成功。

不知道我漏掉了什么。如果你有任何建议,那将非常好......这样我就可以在Google Chrome中调试我的Node.js应用程序了。


3
尝试使用--no-preload选项运行node-inspector。 - Miroslav Bajtoš
1
  1. 检查Chrome的开发者工具控制台 - 是否有任何错误?
- Miroslav Bajtoš
6个回答

122
尝试运行node --debug-brk app.js而不是仅使用--debug。你的应用程序可能在node调试器钩入node进程之前没有暂停。使用--debug-brk将强制node在您的应用程序的第一行中断,并等待调试器附加到进程。加载node-inspector Web界面会导致node-inspector附加到您的node进程。这就是为什么在查询字符串中包含node调试端口(localhost:8080/debug?port=5858)。您要告诉node-inspector它应该到达并附加到哪个端口。
这是我制作的一个动画GIF,展示了完整安装和运行node-inspector。

在GIF中,我使用了--debug标志,因为我没有调试任何在启动时立即运行的代码。我在请求处理程序内进行了调试,该处理程序仅在请求页面时触发。因此,刷新页面会使node-inspector在那一行上中断。
我还制作了一个15分钟的YouTube教程。

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


1
谢谢Alex,之前我确实看了你的YouTube视频,非常有用,谢谢。--debug-brk对我很有帮助。但是,当我在我的路由中设置断点时,出现了问题。在我的情况下,我正在尝试使用cheerio + request来爬取一个网站。我已经创建了一个路由,比如说scrape.js,我希望能够调试这个文件,但是它没有触发断点,我是不是漏掉了什么? - genwip
我不确定。没有代码示例很难知道。您能否将运行到声明该路由的所有代码粘贴到gist中,并附上您正在导航以触发请求处理程序的URL? - Chev
1
@AlexFord:你是怎么制作这个gif的?我觉得它非常酷,而且可能非常有用。 - SharpCoder
@SharpCoder 我使用了Camtasia来录制视频。在他们的高级导出选项中,您可以选择动画GIF。 - Chev
我想要在调试模式下运行mocha单元测试,命令为“>node-debug -p 8900 mocha .”,但是遇到了类似的问题,如果我们尝试使用node-debug来调用mocha,我们该如何加上-brk开关,因为我们无法控制node。 - Anand
1
@SutikshanDubey 参考这个答案。当你到达第三步时,请确保使用 node-inspector 命令而不是 node-debug 命令。node-debug 命令既运行您的脚本 启动 node-inspector 服务器。您只需要启动服务器,而不是启动脚本。然后,您可以使用 --debug-brk 标志单独启动脚本。 - Chev

22

默认情况下,node-inspector尝试在启动调试窗口之前预加载所有代码。由于这种预加载,我曾经遇到过 node-inspector 永远挂起的情况。幸运的是,新版本有一个选项可以停止预加载,从而使检查器加载更快。

尝试 node-inspector --no-preload


非常有帮助!我也遇到了这个愚蠢的挂起问题,而我宁愿立即触发断点。感谢您的提示! - Chev

6

标准的远程调试在node 6.5中完全失效了。但是,它已被一个新的内部node功能所取代。

$ 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


1
你真是救了我的一天!不再需要使用node-inspector了。 - Steffen Langer
在我的情况下,它给了我一个以"ws://"开头的URL...这台机器是一个无头服务器,所以我传递了host:port选项,但我仍然无法在我的本地Chrome实例中打开"ws://" URL。 - Michael

1

--debug-brk现已弃用。

尝试使用node --inspect-brk <您的起始文件名>,然后转到Chrome并输入网址 chrome://inspect,点击为Node打开专用DevTools, 调试器将启动,无需使用node-inspector。


0

enter image description here

在Node Inspector的左侧,“Sources”选项卡中,有一个“带三角形的框”,高亮显示为“Show Navigator”(如上图所示)。打开它以找到要调试的文件,并在尚未运行的代码上设置断点。
还要注意,如果您想调试在启动节点上运行的代码,则需要在启动时使用--debug-brk选项。然后,在Node Inspector中,您需要启动应用程序(F8运行所有)。如果您想调试所有初始化代码(例如启动Web浏览器),则需要此选项。

谢谢Clay,--debug-brk似乎起作用了..虽然一开始没有起作用..但尝试了几次之后..它就起作用了。 - genwip

0

node-debug --no-preload app.js

这是对我有效的方法。根据this所述:

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

必须使用--debug-brk启动调试过程,这样脚本就会在第一行暂停。

注意:node-debug默认为您添加此选项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接