我使用節點客戶端的調試器,像這樣:在子進程上使用Node.js命令行調試器?
節點調試myscript.js
但這個過程使用生成子:
VAR孩子=要求(「child_process 「).fork(cmd,args);
有沒有辦法讓這個孩子也可以在「調試」模式下啓動?
我使用節點客戶端的調試器,像這樣:在子進程上使用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