2013-03-17 38 views
6

我有興趣監控javascript錯誤並記錄錯誤與調用堆棧。監控js錯誤

我不想把所有東西都包裝在try-catch塊中。

根據這篇文章http://blog.errorception.com/2011/12/call-stacks-in-ie.html 它裏面window.onerror可能「遞歸調用.caller每個功能在堆棧中知道先前的功能在堆棧

我試圖讓調用堆棧:

window.onerror = function(errorMsg, url, lineNumber) 
{ 
    var stk = [], clr = arguments.callee.caller; 
    while(clr) 
    { 
     stk.push("" + clr); 
     clr = clr.caller; 
    } 
    // Logging stk 
    send_callstack_to_log(stk); 
} 

,但只有一個步驟是可能的,即使調用堆棧是更長的時間:

(function() 
{ 
function inside() {it.will.be.exception;}; 
function middle() {inside()}; 
function outside() {middle()} 
outside(); 
})(); 

有一點是沒有意思的,因爲錯誤論據給了我更多關於它的信息。

是的,我根據我上面提到的文章嘗試了IE瀏覽器。

備註:我也嘗試在「ERRORCAEPTION」上打開一個帳戶來收集錯誤日誌。我使用IE進行了測試,「ERRORCAEPTION」認識到錯誤來自IE,但我無法在日誌中找到任何調用堆棧信息。

+0

你可以看看[stacktrace.js(https://github.com/eriwen/javascript-stacktrace)。這是一個跨瀏覽器的解決方案。 – zeroflagL 2013-03-17 14:17:38

回答

1

到這裏看看: https://github.com/eriwen/javascript-stacktrace

這是一個我在Muscula使用,像errorception服務,除非它是免費的。

+0

我見過這個。它不能幫助我window.onerror。在try-catch內部很容易獲得堆棧,但正如我在我的問題中所述 - 我無法將所有內容都包含在try-catch塊中。但是,謝謝你的努力。 – Alexander 2013-03-18 15:52:37

2

不幸的是,這個日誌並不總是可用的,它缺少行號,你不能真正依靠它。

嘗試https://qbaka.com

Qbaka自動重載一堆的JavaScript功能,如addEventListenersetTimeoutXMLHtppRequest,等等,這樣的錯誤在回調中發生的事情是用的try-catch自動包裹,你會得到蹤跡無需任何代碼修改。