用mocha的--debug-brk开关启用节点调试器的正确方法是什么?


72

我的被​​测模块中有一些调试器语句,并且希望使用--debug-brk设置运行mocha并击中断点,以便可以检查模块的状态。不幸的是,每当我使用该选项运行mocha时,我都会在下一行出现空白光标。我可以输入文本,但是似乎没有任何东西可以处理我的命令(它看起来确实不像节点调试器):

$ mocha --debug-brk tests.js -R spec
debugger listening on port 5858
[BLANK CURSOR]

我启动Mocha的方式有问题吗?


--debug和之间有一个区别--debug-brk。在--debug-brk启动时停止应用程序。在--debug启动应用程序,并在你的第一个断点处停止。
basickarl

Answers:


53

要回答最初的问题,即使我也建议您研究一下node-inspector:您可以通过mocha使用内置于节点的CLI调试器,并带有debug选项,而不是--debugor--debug-brk 标志。(请注意没有破折号。)

在您的示例中,它将是:

$摩卡调试tests.js -R规范
侦听器侦听端口5858
连接...好
中断node_modules / mocha / bin / _mocha:7
  5 * /
  6 
  7 var程序= require('commander')
  8,sprintf = require('util')。format
  9,路径= require('path')
调试> [CURSOR]

同样,debug如上以粗体显示,没有破折号。(=

相关:https : //github.com/visionmedia/mocha/issues/247


13
怎么会用mocha debug在休息node_modules/mocha/bin/_mocha,而不是在我的代码,我把debugger发言?您如何在代码中删除debugger语句的那一点获得REPL ?
内森·华莱士

4
这行得通(我不得不c一次到达断点,但是要到达NBD。)但是令人讨厌的是,我坐在断点时似乎无法检查任何东西。就像我可以拥有的var foo='bar'; debugger;,如果我foo在提示符下键入,我会得到ReferenceError: foo is not defined
thom_nic

9
调试程序的命令行是一个JavaScript REPL,但它是不是在相同的环境中的代码实例化一个REPL。(是的,这真令人困惑,我知道。)您必须记住repl在调试器的命令行中键入内容,以便为自己的代码获得实际的交互环境!
ELLIOTTCABLE 2015年

64

使用最新版本的nodejs(> = v6.3.0)和mocha(> = 3.1.0),可以使用V8检查器集成

V8 Inspector集成允许将Chrome DevTools附加到Node.js实例以进行调试和性能分析

用法

--inspect激活V8检查器集成,并--debug-brk在开始处添加一个断点。从nodejs v7.6.0mocha v3.3.0开始,您可以将--inspect-brk简写用于--inspect --debug-brk

$ mocha --debug-brk --inspect
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

使用npm脚本

如果您有一个使用mocha的npm测试脚本,则可以使用option delimiter结尾将选项从npm传递到您的mocha脚本--

$ npm test -- --inspect --debug-brk

镀铬笔尖

不必每次都复制粘贴该URL,而是转到chrome://inspect并单击“远程目标”部分中的相应链接。


6
2016年底最有用的答案
Kiril

1
请注意,自mocha v3.1.0起
2016年

1
谢谢@忙碌。我已经将此添加到答案中,以及v8检查器集成所需的nodejs版本
stropitek

1
@JørgenTvedt我给它一个尝试,但我一直没能做出--inspect--watch协同工作。
stropitek

1
npm test -- --inspect --debug-brk因为nodev6.3 +绝对正确,我开始怀疑它,但是正如@busticated指出的那样,您需要升级Mocha版本。就我而言,我去3.0.23.5.0
pulkitsinghal,2017年

52

我能够使用node-inspector使它正常工作。我像在一个shell中显示的那样运行测试:

mocha --debug-brk mocha/test.js

然后在第二个shell中运行node-inspector:

node-inspector

在浏览器中显示节点检查器吐出的URL,使我可以使用Web检查器进行调试。

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

谢谢-希望只使用Node的本机交互式调试器,但似乎node-inspector是大多数人所追求的方向。
Howard Dierking 2013年

2
我做到了,调试器从Mocha源代码的第一行开始。我找不到打开测试并在其中放置断点的方法。如何方便地进入测试代码?
MedicineMan

@MedicineMandebugger;在您想要断点的任何地方添加代码行。此处的更多信息:nodejs.org/api/debugger.html
Matthew Shanley,

11

如果安装了node-insector,则可以调试Mocha测试,而无需先实际运行node-inspector。最简单的方法是

node-debug _mocha

那应该开始调试chrome中的节点测试(也适用于Safari)

我看到测试无法正常工作的原因之一是有时您尝试使用http:// localhost:8080 / debug?port = 5858http://127.0.0.1:8080/debug?port=5858


对于大多数人来说,这是最简单的答案。
mikemaccana 2015年

如果您还使用Babel,babel-node-debug软件包/命令可能会有所帮助。
alxndr

您可能需要运行“ node-debug _mocha --no-timeouts”以确保在测试中中断不会发生超时。
皮兰

3

运行带有标记的mocha,--inspect-brk然后从页面chrome中单击“打开用于节点的专用DevTools” chrome://inspect。在专用的DevTools窗口中,添加连接localhost:9229以自动连接。

还要在debugger要调试的文件中添加一条语句。

(这是截至2017年10月的最新版本的Node和chrome)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.