【问题标题】:Use Node.js command line debugger on child process?在子进程上使用 Node.js 命令行调试器?
【发布时间】:2012-03-19 10:11:07
【问题描述】:

我使用 Node 客户端调试器,如下所示:

节点调试 myscript.js

但是这个过程产生了一个孩子:

var child = require("child_process").fork(cmd, args);

有没有办法让这个孩子也以“调试”模式启动?

【问题讨论】:

  • 也许你可以在myscript里面检查主进程是否处于调试模式,然后将--debug作为args之一传递。
  • 并且不要忘记更改调试器端口,因为默认已经忙于父进程调试器
  • 在 fork cmd 或 args 中添加 --debug 或 --debug=5859(新端口)会导致错误。我认为这是因为 --debug 是 Node 进程的一个选项,而不是被分叉的进程。还有其他想法吗?

标签: debugging node.js


【解决方案1】:

这是另一种方式,这将使子级在空闲端口上可调试:

// Determine if in debug mode. 
// If so, pass in a debug-brk option manually, without specifying port.
var startOpts = {};
var isInDebugMode = typeof v8debug === 'object';
if(isInDebugMode) {
     startOpts = {execArgv: ['--debug-brk']};
}
child_process.fork('./some_module.js', startArgs, startOpts);

【讨论】:

  • 对不起,这对我不起作用,我认为您需要明确告诉它侦听未使用的端口,例如 execArgv.push('--debug=' + (5303 + processId++) );
【解决方案2】:

是的。您必须在新端口中生成您的进程。有一种解决方法可以使用集群进行调试,方法与您可以做的相同:

var debug = process.execArgv.indexOf('--debug') !== -1;
if(debug) {
    //Set an unused port number.
    process.execArgv.push('--debug=' + (5859));
}
var child = require("child_process").fork(cmd, args);

.... 调试器监听 5859 端口

【讨论】:

  • 我在这方面遇到了困难,因为我将 child_process 模块影响到了一个名为 process 的局部变量,隐藏了节点进程全局变量,因此没有定义 process.execArgv。注意“进程”是一个节点全局变量!
【解决方案3】:

没问题。您需要做的就是将调试 Sig 发送到正在运行的进程。查看节点检查器文档查找启用调试模式

我不能告诉你如何进行调试,我不确定你可以,但你总是可以从代码中做一些事情,比如

while(true){debugger}

这样您就可以捕获调试语句,然后手动跳出循环。我知道脏=)

【讨论】:

    猜你喜欢
    • 2014-04-07
    • 2014-11-15
    • 2015-01-13
    • 2018-08-15
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 2013-12-08
    相关资源
    最近更新 更多