console.trace()
在控制台上输出其结果。
我想以字符串形式获取结果并将它们保存到文件中。
我没有为函数定义名称,也无法使用callee.caller.name
.
如何使用chrome或firefox在javascript中将console.trace()的结果作为字符串获取?
IT技术
javascript
firefox
google-chrome
console
stack-trace
2021-03-16 18:10:36
6个回答
我不确定 firefox,但在 v8/chrome 中,您可以在名为captureStackTrace
. (更多信息在这里)
所以获得它的一种hacky方法是:
var getStackTrace = function() {
var obj = {};
Error.captureStackTrace(obj, getStackTrace);
return obj.stack;
};
console.log(getStackTrace());
通常,getStackTrace
当它被捕获时会在堆栈上。那里的第二个参数排除getStackTrace
在堆栈跟踪中。
Error.stack 正是您所需要的。它适用于 Chrome 和 Firefox。例如
try { var a = {}; a.debug(); } catch(ex) {console.log(ex.stack)}
将在 Chrome 中给出:
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)
在 Firefox 中:
@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
这将为现代 Chrome、Firefox、Opera 和 IE10+ 提供堆栈跟踪(作为字符串数组)
function getStackTrace () {
var stack;
try {
throw new Error('');
}
catch (error) {
stack = error.stack || '';
}
stack = stack.split('\n').map(function (line) { return line.trim(); });
return stack.splice(stack[0] == 'Error' ? 2 : 1);
}
用法:
console.log(getStackTrace().join('\n'));
它从堆栈中排除了它自己的调用以及 Chrome 和 Firefox(但不是 IE)使用的标题“错误”。
它不应该在旧浏览器上崩溃,而只是返回空数组。如果您需要更通用的解决方案,请查看stacktrace.js。它支持的浏览器列表确实令人印象深刻,但在我看来,它对于它旨在执行的小任务来说非常大:37Kb 的缩小文本,包括所有依赖项。
有一个名为stacktrace.js的库,可为您提供跨浏览器堆栈跟踪。您可以通过包含脚本并随时调用来使用它:
var trace = printStackTrace();
这只是对 Konstantin 优秀代码的一个小改进。它减少了扔接球的开销,只是实例化了错误堆栈:
function getStackTrace () {
let stack = new Error().stack || '';
stack = stack.split('\n').map(function (line) { return line.trim(); });
return stack.splice(stack[0] == 'Error' ? 2 : 1);
}
我通常需要特定级别的堆栈跟踪(用于我的自定义记录器),因此这在调用时也是可能的:
getStackTrace()[2]; // get stack trace info 2 levels-deep