2012-02-29 93 views
7

我使用節點客戶端的調試器,像這樣:在子進程上使用Node.js命令行調試器?

節點調試myscript.js

但這個過程使用生成子:

VAR孩子=要求(「child_process 「).fork(cmd,args);

有沒有辦法讓這個孩子也可以在「調試」模式下啓動?

+0

也許你可以在主進程處於調試模式時檢查myscript內部,然後將'--debug'作爲'args'之一傳遞。 – loganfsmyth 2012-03-01 01:20:37

+0

並且不要忘記更改調試器端口,因爲默認情況下已經忙於父進程調試器 – 2012-03-01 03:16:13

+0

添加--debug或--debug = 5859(新端口)fork cmd或args導致錯誤。我認爲這是因爲--debug是Node進程的選項,而不是被分叉的進程。任何其他想法? – user836003 2012-03-02 01:36:59

回答

0

沒問題。您只需將調試信號發送到正在運行的進程。看看節點檢查文檔做一個找到啓用調試模式

我不能老是告訴你如何做一個調試BRK,我不知道你可以,但你總是可以做一些事情,從這樣的代碼

while(true){debugger}

因此,您可以捕獲調試語句,然後手動跳出循環。骯髒我知道=)

3

是的。您必須在新的端口中產生您的流程。有一種變通方法與集羣進行調試,以同樣的方式,你可以這樣做:

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

+0

我掙扎在此,因爲我影響了child_process模塊​​到一個名爲process的局部變量,隱藏了節點process全局變量,因此process.execArgv沒有被定義。 Beaware「process」是一個節點全局變量! – 2014-09-30 09:55:10

-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); 
+0

對不起,這對我沒有用,我認爲你需要明確地告訴它聽一個未使用的端口,像這樣execArgv.push(' - debug ='+(5303 + processId ++)); – 2016-03-20 03:39:12

+0

@ davidforneron的回答是更正確的 – 2016-03-20 03:39:59