在NodeJs应用程序中如何从内部将其切换到调试模式

4
我有一个名为"some-module"的NodeJs模块,我希望它可以全局安装,这样就可以直接从命令行运行而不需要使用node可执行文件前缀。例如:$> some-module [args] 我想让其中一个参数是--debug。这样做的原因是我不想要求这个模块的用户将其安装到本地目录中,只是为了运行node --debug-brk node_modules/some-module/[path to entry point] [args]
NodeJs文档在其高级用法部分关于调试(http://nodemanual.org/latest/nodejs_ref_guide/debugging.node.js.html)中指出:

V8调试器可以通过使用--debug命令行标志启用和访问,也可以通过向现有的Node.js进程发送SIGUSR1信号来访问。

我尝试使用以下方式实现:
process.kill(process.pid, 'SIGUSR1');

引起错误的部分:

node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: Unknown signal: SIGUSR1
    at EventEmitter.kill (node.js:366:17)
    at Object.<anonymous> (c:\dev\some-module\app.js:94:17)
    at Module._compile (module.js:441:26)
    at Object..js (module.js:459:10)
    at Module.load (module.js:348:31)
    at Function._load (module.js:308:12)
    at Array.0 (module.js:479:10)
    at EventEmitter._tickCallback (node.js:192:40)

我需要怎么做才能将正在运行的进程切换到调试模式?

另外,我想使用node-inspector来调试给定的应用程序。


你最终找到了解决方案吗? - Nick
1个回答

0

我不太确定我是否理解了你的问题,但是...

你可以使用npm全局安装一个应用程序,并在断点处停止。在package.json中输入:

...
"scripts": {"start": "node --debug-brk some-module.js"},
"bin" : { "some-module" : "./some-module.js" },
...

运行npm start -g some-module会在第一行中断。 然后,您可以使用node-inspector进行调试。

关于代码内部停止的部分,Node有一个内置调试器(相当基础),但它允许此功能。 如果您在代码中包含以下内容:

debugger;

并运行:

node debug some-module.js 

在调试器中它会停在那里(注意:这不同于 node-inspector,我不知道是否可以使用 node-inspector 实现此操作)。

我不太理解你这么做的原因,但希望这会有所帮助。


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