如何使用chrome或firefox在javascript中获取console.trace()的结果作为字符串?

console.trace()在控制台上输出其结果。
我想将结果作为字符串获取并保存到文件中。

我没有定义函数的名称,我也无法用.callee.caller.name


答案 1

我不确定firefox,但是在v8 / chrome中,您可以在错误构造函数上使用一个名为.(更多信息请点击这里)captureStackTrace)

因此,获得它的一种黑客方法是:

var getStackTrace = function() {
  var obj = {};
  Error.captureStackTrace(obj, getStackTrace);
  return obj.stack;
};

console.log(getStackTrace());

通常,在捕获堆栈时,它将在堆栈上。其中的第二个参数排除在堆栈跟踪中。getStackTracegetStackTrace


答案 2

Error.stack是你需要的。它适用于Chrome和Firefox。例如

try { var a = {}; a.debug(); } catch(ex) {console.log(ex.stack)}

将给出铬:

TypeError: Object #<Object> has no method 'debug'
    at eval at <anonymous> (unknown source)
    at eval (native)
    at Object._evaluateOn (unknown source)
    at Object._evaluateAndWrap (unknown source)
    at Object.evaluate (unknown source)

在火狐中:

@http://www.google.com.ua/:87 _firebugInjectedEvaluate("with(_FirebugCommandLine){try { var a = {}; a.debug() } catch(ex) {console.log(ex.stack)}\n};")
@http://www.google.com.ua/:87 _firebugEvalEvent([object Event])
@http://www.google.com.ua/:67