JavaScriptでthrow
を実行した場合、スローされたエラーは通常、スクリプトのさらなる実行を停止できるwindow.onerror
ハンドラに伝播します。スクリプトを停止せずにJSスタックトレースを取得するにはどうすればよいですか?
この実行を中止せずに関数内からスタックトレースを取得する方法はありますか?
JavaScriptでthrow
を実行した場合、スローされたエラーは通常、スクリプトのさらなる実行を停止できるwindow.onerror
ハンドラに伝播します。スクリプトを停止せずにJSスタックトレースを取得するにはどうすればよいですか?
この実行を中止せずに関数内からスタックトレースを取得する方法はありますか?
try/catchによってキャッチされない限り、エラーをスローするとスタックが停止します。
function getStack() {
try {
throw new Error();
} catch(e) {
return e.stack;
}
}
任意の関数内からgetStackを呼び出すと、そこからスタックが出力されます。
スタック内のメソッド名はソースマップの影響を受けません。したがって、縮小されたコードを扱う場合でも、難読化された名前が残る可能性があります。
はまた、単にスタックトレースを、それをスローせずに新しいエラーを作成して使用することができます
function doSomething() {
...
const stackTrace = new Error().stack
...
}