我試圖在JavaScript中生成一個堆棧跟蹤。我有一個在Chrome中運行得非常好的實現,但是Firefox中存在一個問題:像DOMException這樣的本機異常沒有.stack
屬性。DOMException在Chrome中有堆疊,但在Firefox中沒有堆疊
<div id="test"></div>
<script type="text/javascript">
try {
var range = document.createRange();
range.setStart(document.getElementById("test"), -1); // throws Exception
} catch (e) {
console.log(e.stack);
}
</script>
這會在Chrome中給Error: Index or size was negative, or greater than the allowed value. at http://test/test.html:5:8
。
但在Firefox,我得到undefined
- 傷心FAIS :(
我知道Eriwen's stacktrace script和stracktracejs和我的實現是啓發通過它,我會考慮使用caller.callee
回退,但我寧願。不是因爲我不能獲取文件和行號。
你知道一個更好的解決方案?
我可以在try-catch語句中包裝可疑的調用,但我不知道在獲取實際錯誤之前是否有可疑的調用,然後我將修復代碼,以免它再次丟失。
我可以捕捉異常並重新拋出new Error(e.message)
,但後來我又丟失了堆棧跟蹤。
在Firefox中,'e.toString()'似乎給出了一個堆棧跟蹤。實際的屬性看起來是'e.location',但是在訪問時會引發錯誤。 – pimvdb
太棒了!我會研究這個。 - 'e.location'似乎提供了一個適當填充的'caller.callee'。 – Halcyon
雖然格式完全不同。你想達到什麼目的?如果那是你想要的,我猜你也可以重新拋出「拋出e」。 – pimvdb