我正在try 以变量的形式获取代码中给定位置的堆栈跟踪.
目前,我一直在try 使用console.trace()
和new Error().stack
,但它们并不是最优的.
前者将堆栈打印到控制台,而我想将其保存在一个变量中,而后者不能正确处理setTimeout等异步函数调用.
例如,使用以下代码:
var getStackTrace = function() {
var obj = {};
Error.captureStackTrace(obj, getStackTrace);
return obj.stack;
};
function f(){
console.log(getStackTrace());
}
function f1(){
setTimeout(f);
}
f1();
我只能得到:
VM3498:2 Error
at f (<anonymous>:2:17)
而如果我使用console.trace():
function f(){
console.trace();
}
function f1(){
setTimeout(f);
}
f1();
我得到了:
f @ VM4219:2
setTimeout (async)
f1 @ VM4219:6
(anonymous) @ VM4219:9
这是完整的,但直接在控制台中打印.
有没有办法在变量中获取完整的堆栈跟踪或获得console.trace()的输出?