如何让一个简单的stacktrace js示例工作?

时间:2015-11-30 15:07:04

标签: javascript stack-trace error-logging

我正在尝试使用一个非常简单的stacktrace.js示例。我正在尝试使用printStackTrace()方法来执行此操作。

基本上,我正在调用一个错误的函数,它会在控制台中抛出错误和堆栈跟踪。但是,我希望控制台中显示的此错误和堆栈跟踪存储在字符串中,而是打印出该字符串。

例如,如果我运行此功能

function foo() {
  var x = y;
}

我收到未被捕获的引用错误y is not defined

我需要将它存储在字符串中。

到目前为止,我已经尝试了以下

var error = null;
function foo(){
    try {
        var x = y;
    } catch(e) {
        error = printStackTrace(e);
    }
}
foo();
console.log(error);

但它正在打印一个我不理解的不同堆栈跟踪。

enter image description here

使用printStackTrace方法的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

Try something like

  window.onerror = function(msg, file, line, col, error) {
    var callback = function(stackframes) {
      var stringifiedStack = stackframes.map(function(sf) {
        return sf.toString();
      }).join('\n');
      alert('msg: ' + msg + ' line: ' + line + ' col: ' + col + ' error: ' + error + ' file:' + file);
    };
    StackTrace.get().then(callback)
  };

工作示例:



window.onerror = function(msg, file, line, col, error) {
  StackTrace.fromError(error).then(callback).catch(errback);
}
var errback = function(err) { console.log(err.message);
};
var callback = function(stackframes) {
    var stringifiedStack = stackframes.map(function(sf) {
      return sf.toString();
    }).join('\n');  };
function fault() {

alert('Error will be invoked!')
  throw "Test Error"
};

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/stacktrace.js/2.0.0/stacktrace.js"></script>

<input id="a" type="button" value="Test Call!" onClick="fault();" />
&#13;
&#13;
&#13;

但似乎他们有bug