如何在Windows 7上使用node-inspector和断点调试Gruntfile?

11

我已经花了过去几天的时间尝试让这个工作,但没有成功。我发现大多数解决方案似乎对于调试node应用程序“还行”。但是我在调试grunt时没有太多运气。我想能够在我的gruntfile中设置断点,并使用浏览器或IDE逐步执行代码。

我尝试了以下方法:

使用node-inspector出现的错误信息

enter image description here

目前,node-inspector感觉已经让我离我想要的最近了。为了到达这里,我执行了以下命令:

grunt node-inspector
node --debug-brk Gruntfile.js
然后我去了localhost:8080/debug?port=5858来调试我的Gruntfile.js。但正如我之前提到的,一旦我按下F8跳转到断点,它就会崩溃,并显示上述错误。有人用这种方法成功地调试过Gruntfile吗?到目前为止,我从搜索努力中没有找到非常好的文档方式来做到这一点。希望这对将来的用户有用或有益。顺便说一句,我正在使用Windows 7。谢谢您的帮助。
更新:
我已经尝试了@dylants建议的以下方法,但目前还没有成功。
1.在Windows机器上找到了grunt.cmd文件,位于 C:\Users\khollenbeck\AppData\Roaming\npm。打开了grunt.cmd文件并找到了以下内容...
2.这让我进入了C:\Users\khollenbeck\AppData\Roaming\npm\node_modules\grunt-cli\bin,其中包含一个名为grunt的文件。从那里,在文件顶部更改了这个代码#!/usr/bin/env node#!/usr/bin/env node --debug-brk 3.在执行node-inspector C:\path\to\gruntfile grunt命令后,我得到了以下结果。
4.接下来我从grunt dir中运行了grunt命令。(保留在原始命令提示符中运行的服务器)
从这里开始,我期望Gruntfile.js出现在Chrome开发工具的源代码中。我还希望能够从那里设置断点。但是,这没有发生。相反,它只是在不中断或加载浏览器的情况下一路运行完整个Gruntfile。
编辑:
啊,我知道我错在哪里了。由于某些原因,我没有添加路径C:\Users\khollenbeck\AppData\Roaming\npm\node_modules\grunt-cli\bin\grunt,就直接执行了node --debug-brk。现在它已经正常工作了,非常感谢您的帮助。对于让问题拖延这么久,我表示歉意。但希望这对将来的Windows用户有用。

在第三步中,当您运行node-inspector时,只需运行命令node-inspector而不带任何参数。在第四步中,尝试运行node --debug-brk C:\Users\khollenbeck\AppData\Roaming\npm\node_modules\grunt-cli\bin\grunt而不是仅运行grunt。如果grunt以调试模式启动,则应该看到该命令的输出为“debugger listening on port 5858”。 - dylants
好的,这让我更接近了解问题...但还有一个问题。现在我已经打开了调试器并加载了Gruntfile。我从第三个命令窗口运行grunt,它会暂停命令行,但不会触发我在Chrome中设置的断点。 - khollenbeck
你不需要从第三个窗口启动grunt,因为它已经通过node --debug-brk ...命令运行。只需使用Chrome逐步执行即可,如果需要重新运行,请再次执行相同的node --debug-brk ...命令。我已经更新了我的答案,希望能更好地解释。 - dylants
啊,我知道我错在哪里了。由于某种原因,我没有添加路径C:\Users\khollenbeck\AppData\Roaming\npm\node_modules\grunt-cli\bin\grunt就执行了node --debug-brk。现在它可以工作了,非常感谢。很抱歉让这个问题拖延了这么久。但希望这对未来的Windows用户有所帮助。 - khollenbeck
哇哦!没问题,我很高兴我们终于把它弄好了:) - dylants
3个回答

11

通过启动node-inspector并在调试模式下启动grunt,可以实现这一点。完成后,您可以像平常一样在Chrome中逐步执行Gruntfile.js

启动node-inspector

如果您还没有node-inspector,请使用npm install -g node-inspector进行安装。然后在一个终端/命令提示符中启动它:

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

以调试模式运行grunt

首先,找到你的grunt脚本。这是在命令行中运行grunt命令时执行的JavaScript文件。如果你使用npm install -g grunt-cli全局安装了grunt,则它最可能位于*nix或Mac机器上的/usr/bin/usr/local/bin中。对于Windows机器,grunt.cmd文件指向grunt脚本所在的位置。很可能grunt脚本位于 C:\Users\<username>\AppData\Roaming\npm\node_modules\grunt-cli\bin

一旦找到脚本所在位置,使用node --debug-brk来执行此脚本,从而在文件的第一行上暂停调试模式下的grunt。例如,假设grunt脚本位于/usr/bin/grunt

$ node --debug-brk /usr/bin/grunt 
debugger listening on port 5858

当你看到输出为debugger listening on port 5858时,就说明你已经成功了。这意味着grunt脚本已经停止执行,并等待使用调试器逐步执行。

使用Chrome进行调试

现在打开Chrome并将其指向http://127.0.0.1:8080/debug?port=5858。在Chrome中,打开并添加断点到你的 Gruntfile.js,然后像往常一样逐步执行。


不确定您所说的grunt可执行文件是什么...那应该是哪个文件?或者文件名是什么? - khollenbeck
我指的是在命令行上执行grunt时调用的文件。对我来说,文件名是grunt,但在Windows上可能是grunt.exe。通过运行$ which grunt,我可以看到文件的位置。 - dylants
没错,但我猜你在某个时候安装了 grunt-cli,这就是 grunt 文件所在的位置。我想在 Windows 上,你可以使用 where 命令来定位文件?https://dev59.com/6HVC5IYBdhLWcg3wZwTj - dylants
我找到了可执行文件 grunt.cmd ,这将我带到了 C:\Users\kris\AppData\Roaming\npm\node_modules\grunt-cli\bin\grunt ... 在这个文件中,我将 #!/usr/bin/env node 更改为 #!/usr/bin/env node --debug-brk。之后我运行了 grunt 命令,但没有命中断点,调试器中也没有任何显示。 - khollenbeck
在你的回答中,端口8080是从哪里来的?我没明白。http://127.0.0.1:8080 - ankitjaininfo
显示剩余5条评论

8
要启动node-inspector,你不再需要传递--debug或--debug-brk标志。你可以直接使用node-inspector和文件路径来启动它,就像使用node命令正常启动脚本一样。这应该会自动在Chrome中打开webkit inspector,并暂停在执行的第一行。在此处,你可以插入断点并像平常一样进行调试。
如上所述,要调试grunt任务,你需要使用Mac上的$ which grunt找到Grunt可执行文件,但不确定Windows是否适用。然后,你需要复制该路径,并将其用作作为传递给node-debug的第一个参数,第二个参数是任务(如果必要,还可以包括grunt目标)。例如,可能如下所示: node-debug /usr/local/bin/grunt concat:dev 从这里,你可以调试将被执行的任何文件,包括它本地 node_modules 中的 grunt-concat 的依赖项。因为我发现复制和粘贴我的可执行路径很烦人,所以我做了最简单的Node cli,以将其抽象化 https://github.com/dtothefp/node-build-debug。如果你全局安装了它(当然也安装了全局的node-inspector),你可以: $ build-debug grunt concat:dev

1
使用node-debug比其他工具更容易。它只需要简单的操作即可运行。谢谢! - rcarrillopadron
Windows用户可能会被node-inspector bug 918所困扰,该问题的解决方法在同一线程中有描述。 - Marco Faustinelli

6

在更新的Node版本中(从6.3开始),有一个内置的调试器/检查器:

https://nodejs.org/en/docs/inspector/

只需像这样启动您的Grunt应用程序(在Windows上):

node --inspect %APPDATA%\npm\node_modules\grunt-cli\bin\grunt

如果您安装了Chrome扩展Node Inspector Manager,开发工具将自动打开。
否则,您可以手动打开chrome://inspect并连接到调试会话。

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