将NodeJs应用程序从其进程中切换到调试模式

时间:2012-04-04 14:57:34

标签: debugging node.js

我有一个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

  

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

我试着这样做:

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调试给定的应用程序。

1 个答案:

答案 0 :(得分:0)

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

您可以全局安装应用使用npm将其停在断点中。在package.json put:

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

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

关于从代码中停止的部分,节点在调试器中有一个内置(这是非常基本的),但它允许这个功能。 如果你在代码中包含某个地方:

debugger;

并运行:

node debug some-module.js 

它将在调试器中停止( note :这与node-inspector不同,我不知道是否可以通过node-inspector实现这一点。)

不要理解为什么要这样做,但希望这会有所帮助。