4

我正在尝试TraceKit 来自动向服务器报告 Javascript 错误。它可以正常工作,但堆栈跟踪除外。它只包含一个元素:

TraceKit.report.subscribe(function(stackInfo) { alert(stackInfo.stack.length);});

function foo() {
   bar();
}

function bar() {                                                
   throw "oops";
}

foo();  

警报显示“1”。我还用相同的代码创建了一个 JSFiddle ;

为什么我没有得到完整的堆栈跟踪?我已经用 Chrome 和 Firefox 进行了测试。

4

1 回答 1

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

感谢亚历克斯提出这个问题!

于 2013-01-04T07:07:26.300 回答