我正在尝试TraceKit自动向服务器报告Javascript错误。它可以正常工作,但堆栈跟踪除外。它只包含一个元素:
TraceKit.report.subscribe(function(stackInfo) { alert(stackInfo.stack.length);});
function foo() {
bar();
}
function bar() {
throw "oops";
}
foo();
警报显示“1”。我还使用相同的代码创建了a JSFiddle;
为什么我没有获得完整的堆栈跟踪?我已经使用Chrome和Firefox进行了测试。
答案 0 :(得分:4)
目前,您需要将throw "oops";
更改为throw new Error("oops");
,然后您应该获得完整的堆栈跟踪。
将来,TraceKit可以通过重新抛出错误并相应地修复堆栈跟踪来解决这个问题。这个jsfiddle显示重新投掷以获得真正的堆栈跟踪:http://jsfiddle.net/DevinRhode2/dAYmJ/1/
代码是:
try {
function foo() {
bar();
}
function bar() {
throw "oops";
}
foo();
} catch (e) {
console.log(e, e.message, e.stack); //oops undefined undefined
try {
throw new Error(e);
} catch (e) {
console.log(
e, e.message, e.stack);/*
Error {} "oops" "Error: oops
at file://localhost/Users/devinrhode2/Desktop/test.html:23:13"
*/
}
}
关于github上的TraceKit的其他讨论:https://github.com/occ/TraceKit/issues/23
感谢Alex提出这个问题!