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

Node.js 如何调试通过命令行(cli)启动的节点应用程序(如forever或supervisor)?,node.js,debugging,Node.js,Debugging,我熟悉调试自己的节点应用程序(通常使用节点检查器)。今天我想调试其他人的程序。我正试图找出一个问题。因此,很自然地,我只需在命令调用中添加一个--debug(或debug brk),但它会将其传递给它所监视的代码 我曾尝试为supervisor向js文件添加debugger行,但没有成功(可能是因为当时没有附加任何调试器)。这里有一点竞争——我需要启动调试器,并在它启动后但在它从命令行处理其参数之前将其附加到主管进程 我在这里真正想做的是停止supervisor,并在它处理命令行参数之前调试它。

我熟悉调试自己的节点应用程序(通常使用节点检查器)。今天我想调试其他人的程序。我正试图找出一个问题。因此,很自然地,我只需在命令调用中添加一个
--debug
(或
debug brk
),但它会将其传递给它所监视的代码

我曾尝试为supervisor向js文件添加
debugger
行,但没有成功(可能是因为当时没有附加任何调试器)。这里有一点竞争——我需要启动调试器,并在它启动后但在它从命令行处理其参数之前将其附加到主管进程


我在这里真正想做的是停止
supervisor
,并在它处理命令行参数之前调试它。我该怎么做

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

基本思想是,在Node.js中,甚至您的cli应用程序都只是向OS命令行界面公开的普通节点应用程序。在Unix系统上,您正在使用以下行:

#!/usr/bin/env node
允许环境执行脚本

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

npm install -g node-inspector
我个人更喜欢尽可能多地控制我的开发环境,所以我更喜欢打破一些惯例,在源代码管理中检查我的node_模块,同时通过删除-g在本地安装我可以安装的所有东西

npm install node-inspector
现在,你不必为了使这个工作,我只是描述这个设置,因为它涉及到你的问题。当我运行节点检查器时,我不能简单地使用:

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

node_modules/.bin/node-inspector
现在我和你一样在运行节点检查器

接下来,我需要做的就是在debug中启动cli进程,并可选地向其传递参数:

node --debug-brk node_modules/.bin/hexo generate
注意:我在这里显式调用符号链接,而不仅仅是:

node --debug-brk hexo generate
如果我尝试上面的行,我会得到一个错误:“错误:找不到模块”


我希望这能有所帮助。

我用
调试器尝试了这一点
/node\u modules/hexo/lib/hexo/index.js:hexo()
中,但我得到的只是stdout上的“调试器侦听端口5858”,然后挂起。无法访问交互式调试器,无法生成。我不确定我是否了解您。。。我只在终端中尝试了上面详述的命令。如果您正在使用带有内置调试器的IDE或其他我没有尝试过的东西。。。我也开始执行,就像常规命令只会更明确地说明.bin位置的路径一样。不使用IDE。我试图找出hexo插件中的一个bug,所以我的策略是放置一个
调试器。当我运行
/usr/local/bin/node--debug brk node_modules/.bin/hexo generate
时,无论是否使用
调试器,它都会挂起在那里。知道为什么吗?上次我这么做是很久以前的事了,它有时会挂起好几分钟才真正连接到调试器。你等了多久才宣布它挂了?所有这些都失败了,你可以求助于穴居人对指纹进行调试,至少在你发现问题之前是这样。我知道这不是很有帮助,但我确实记得这是一个偶然的机会。@KFunk你最后想出如何调试你的Hexo插件了吗?我很想知道是怎么做的。B