我正在尝试在 JavaScript 中生成堆栈跟踪。我有一个在 Chrome 中运行良好的实现,但在 Firefox 中存在一个问题:像 DOMExceptions 这样的本机异常没有.stack
属性。
<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>
这将Error: Index or size was negative, or greater than the allowed value.
at http://test/test.html:5:8
在 Chrome 中给出。
但是在 Firefox 中我得到了undefined
- 可悲的 fais :(
我知道Eriwen 的 stacktrace 脚本和stracktracejs,我的实现受到了它的启发。我会考虑使用caller.callee
后备,但我宁愿不使用,因为我无法获取文件和行号。
你知道更好的解决方案吗?
我可以将可疑调用包装在 try-catch 语句中,但在得到实际错误之前我不知道调用是否可疑,然后我将修复代码,使其永远不会再次抛出。
我可以捕获异常并重新抛出,new Error(e.message)
但是我也丢失了堆栈跟踪。