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