如何调试通过命令行(cli)启动的节点应用程序,例如forever或supervisor?

时间:2015-06-19 16:28:02

标签: node.js debugging

我熟悉调试自己的节点应用程序(通常使用node-inspector)。今天我想调试其他人的程序。我试图跟踪supervisor的问题。所以我自然只是在命令调用中添加--debug(或debug-brk),但它会将其传递给它正在监督的代码。

我已经尝试将debugger行添加到js文件中以供主管使用,但这并不起作用(可能是因为当时没有连接调试器)。这里有一点比赛 - 我需要启动调试器并在启动之后但在它从命令行处理其参数之前将其附加到管理程序进程。

我真正想要做的是停止supervisor并在处理命令行参数之前对其进行调试。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

我在开发hexo博客时遇到了同样的问题。文档还没有完成,所以我发现自己有时需要进行逆向工程。

基本思想是在Node.js中,甚至你的cli应用程序也只是你暴露给操作系统命令行界面的普通节点应用程序。在Unix系统上,您使用以下行:

#!/usr/bin/env node

允许环境执行脚本。

许多基于cli的节点应用试图坚持使用-g选项全局安装它们。

npm install -g node-inspector

我个人更喜欢尽可能多地控制我的开发环境,所以我更喜欢破坏一些约定并检查我的node_modules到源代码控制,同时通过删除-g来安装我可以在本地安装的所有内容。

npm install node-inspector

现在你不必这样做才能完成这项工作,我只是描述了这个设置,因为它与你的问题有关。当我运行node-inspector时,我不能简单地使用:

node-inspector

相反,我必须从我的项目中显式调用它。我通过在node_modules / .bin文件夹中执行符号链接来执行此操作:

node_modules/.bin/node-inspector

现在我和你一样运行node-inspector。

接下来我需要做的就是在debug中启动cli进程,并可选择将params传递给它:

node --debug-brk node_modules/.bin/hexo generate

注意我在这里显式调用符号链接而不是简单地:

node --debug-brk hexo generate

如果我尝试上面这行,我会收到错误:"错误:找不到模块"。

我希望这会有所帮助。