2012-11-20 34 views
8

有關如何以跨瀏覽器方式在JavaScript中生成堆棧跟蹤的任何建議?如何生成javascript stacktrace?

較新的瀏覽器Chrome和Firefox公開了一個允許生成堆棧跟蹤的控制檯對象。此方法不提供將堆棧跟蹤存儲到變量的方法。

https://github.com/eriwen/javascript-stacktrace 工作得很好,但它使單獨的ajax請求加載作爲跟蹤一部分的腳本文件。這似乎是跟蹤庫中的常用方法。我猜測,瀏覽器不公開足夠的信息來生成有意義的堆棧跟蹤(行號,函數名稱,文件名,參數等)。

+0

你是正確IE9-(讓我們面對它,這大概就是我們在這裏遇到麻煩)沒有提供太多有用的信息。可以從'window.onerror'獲得文件和行號,但只有一些時間會觸發並且行號有時是錯誤的。 –

+0

是的,像往常一樣,IE是問題的孩子。我堅持支持IE7,它的onerror事件的行號和函數名稱信息很糟糕。它仍然有用;我用它來寫未被捕獲的錯誤的日誌。 – Kyle

回答

1

創建一個Error對象並檢查它是否爲堆棧成員。從Code Overtones改編:

var e = new Error('dummy'); 
var stack = e.stack.replace(/^[^\(]+?[\n$]/gm, '') // remove lines without '(' 
    .replace(/^\s+at\s+/gm, '') // remove prefix text ' at ' 
    .split('\n'); 
console.log(stack); 

Error.stack在Mozilla's reference documentation被記錄在案。

0

Airbrake provides a JavaScript library for logging stacktraces到您的Airbrake帳戶或Errbit服務器。

我沒有在IE中獲取堆棧跟蹤,其他人可能不完美,但它絕對看起來像是你正在尋找的東西。

+0

謝謝。我已經有一個可以登錄到我的服務器的框架。它基本上是在JavaScript中的log4j。您提供的鏈接中的堆棧跟蹤生成代碼看起來像是從我的問題中的項目中借用的。我正在尋找用於堆棧跟蹤生成的其他庫。實際使用的日誌框架應該是分開的。 – Kyle