我该如何debugging一个通过命令行(cli)启动的节点应用程序,比如永远或是主pipe?
我熟悉debugging我自己的节点应用程序(通常使用节点检查器)。 今天我想debugging别人的程序。 我试图跟supervisor
追查一个问题。 所以自然我只是添加一个--debug
(或debug-brk
)的命令调用,但它传递给它正在监督的代码。
我已经尝试添加到主pipejs文件的debugger
行,但没有奏效(可能是因为当时没有debugging器)。 这里有一些竞争 – 我需要启动debugging器,并在启动之后,但在它从命令行处理其参数之前,将其附加到监控程序进程。
我真正想在这里做的是停止supervisor
,并在处理其命令行参数之前进行debugging。 我怎样才能做到这一点?
在开发我的hexo博客时,我遇到了同样的问题。 文档还不完整,所以我发现自己有时需要进行反向工程。
基本的想法是,在Node.js中,即使你的cli应用程序只是正在暴露给OS命令行界面的普通节点应用程序。 在Unix系统上,你正在使用这一行:
#!/usr/bin/env node
允许环境执行脚本。
许多基于cli的节点应用程序试图坚持用-g选项全局安装它们。
npm install -g node-inspector
我个人更喜欢对我的开发环境尽可能多的控制,所以我更喜欢打破一些约定,检查我的node_modules到源代码控制,同时通过删除-g来安装我可以在本地安装的所有东西。
npm install node-inspector
现在你不必为了完成这个工作而这样做,我只是描述这个设置,因为它涉及到你的问题。 当我运行节点检查器时,我不能简单地使用:
node-inspector
相反,我必须明确地从我的项目中调用它。 我通过在我的node_modules / .bin文件夹中执行符号链接来做到这一点:
node_modules/.bin/node-inspector
现在我正在像你一样运行节点检查器。
接下来,我需要做的是在debugging中启动cli进程,并可以select传递params参数:
node --debug-brk node_modules/.bin/hexo generate
注意我在这里显式调用符号链接,而不是简单地:
node --debug-brk hexo generate
如果我尝试上面的行,我会得到一个错误:“错误:找不到模块”。
我希望这有帮助。