如何在不停止脚本的情况下获取JS堆栈跟踪?

Bry*_*yce 12 javascript stack-trace

如果您throw使用JavaScript,则抛出的错误通常会传播到window.onerror处理程序,这会停止进一步执行脚本.

有没有办法从函数中获取堆栈跟踪而不会导致执行暂停?

小智 22

您也可以创建一个新错误而不抛出它并使用堆栈跟踪

function doSomething() {
    ...
    const stackTrace = new Error().stack
    ...
} 
Run Code Online (Sandbox Code Playgroud)


3st*_*cks 8

抛出错误将暂停堆栈,除非被try / catch捕获。

function getStack() {
    try {
        throw new Error();
    } catch(e) {
        return e.stack;
    }
}
Run Code Online (Sandbox Code Playgroud)

从任何函数中调用getStack将从那里打印出堆栈。

请注意,堆栈中的方法名称不受源映射的影响,因此,如果您使用的是缩略代码,则可能仍会得到混淆的名称。