4

我有一个 NodeJs 模块“some-module”,我想全局安装它,这样它就可以直接从命令行运行,而无需节点可执行前缀。即:$> 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)

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

另外,我想用节点检查器调试给定的应用程序。

4

1 回答 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 

它将在调试器中停止(注意:这与节点检查器不同,我不知道这是否可以通过节点检查器实现)。

不太了解您这样做的原因,但希望这会有所帮助。

于 2012-04-04T19:16:05.743 回答