在子进程上使用Node.js命令行调试器?
我使用节点客户端的调试器,像这样:在子进程上使用Node.js命令行调试器?
节点调试myscript.js
但这个过程使用生成子:
VAR孩子=要求(“child_process “).fork(cmd,args);
有没有办法让这个孩子也可以在“调试”模式下启动?
没问题。您只需将调试信号发送到正在运行的进程。看看节点检查文档做一个找到启用调试模式
我不能老是告诉你如何做一个调试BRK,我不知道你可以,但你总是可以做一些事情,从这样的代码
while(true){debugger}
因此,您可以捕获调试语句,然后手动跳出循环。肮脏我知道=)
是的。您必须在新的端口中产生您的流程。有一种变通方法与集群进行调试,以同样的方式,你可以这样做:
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全局变量,因此process.execArgv没有被定义。 Beaware“process”是一个节点全局变量! – 2014-09-30 09:55:10
这里的另一种方式,这会让一个孩子可调试*端口:
// 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 ++)); – 2016-03-20 03:39:12
@ davidforneron的回答是更正确的 – 2016-03-20 03:39:59
也许你可以在主进程处于调试模式时检查myscript内部,然后将'--debug'作为'args'之一传递。 – loganfsmyth 2012-03-01 01:20:37
并且不要忘记更改调试器端口,因为默认情况下已经忙于父进程调试器 – 2012-03-01 03:16:13
添加--debug或--debug = 5859(新端口)fork cmd或args导致错误。我认为这是因为--debug是Node进程的选项,而不是被分叉的进程。任何其他想法? – user836003 2012-03-02 01:36:59