2016-02-17 33 views
2

我有一些長時間運行的節點代碼,在一段時間後會打印[RangeError: Maximum call stack size exceeded]錯誤並繼續無限期地執行此操作。節點錯誤堆棧跟蹤未定義

要追查什麼遞歸調用導致這(我無法找到任何地方遞歸,我沒有使用任何一個setTimeoutprocess.nextTick),我這樣做:

process.on('uncaughtException', function(error) { 
    console.log(error); 
    console.log(error.stack); 
}); 

這引起了錯誤,但stack財產是undefined!我嘗試拋出自己的錯誤,並且stack屬性顯示了預期的堆棧。節點在堆棧溢出錯誤中不應該有stack?我如何確定哪些呼叫導致了這種情況?

+0

'console.trace'產生更有意義的東西嗎? – Wex

+0

嘗試'console.log(error.stack || error' ...如果'error'參數的類型是'Error',這將會打印堆棧...如果它的類型是'String',它會直接打印這個消息...... –

回答

0

您不必在JavaScript中拋出Error對象。這甚至可以是一個字符串。所以你不能依靠stack屬性來定義你的應用程序崩潰。

從你所描述的你的應用程序中有內存泄漏,你應該嘗試找到。網上有很多教程。還有一個模塊可以在https://www.npmjs.com/package/memwatch上找到稱爲memwatch的泄漏。

+1

Stackoverflow異常在任何情況下肯定是'Error'實例。 – Bergi

+0

但是uncaughtException事件不會捕獲任何未處理的異常嗎?除此之外,你可能根本不應該使用它? – migg