web-dev-qa-db-ja.com

スクリプトを停止せずにJSスタックトレースを取得するにはどうすればよいですか?

JavaScriptでthrowを実行すると、スローされたエラーは通常window.onerrorハンドラーに伝播し、スクリプトのそれ以上の実行を停止する可能性があります。

この実行の停止を引き起こさずに関数内からスタックトレースを取得する方法はありますか?

14
Bryce

エラーをスローすると、try/catchでキャッチされない限り、スタックが停止します。

function getStack() {
    try {
        throw new Error();
    } catch(e) {
        return e.stack;
    }
}

関数内からgetStackを呼び出すと、そこからスタックが出力されます。

スタック内のメソッド名はソースマップの影響を受けないため、縮小されたコードを処理している場合でも、名前が難読化される可能性があることに注意してください。

8
3stacks

スローせずに新しいエラーを作成して、スタックトレースを使用することもできます

function doSomething() {
    ...
    const stackTrace = new Error().stack
    ...
} 
25
Tuti