[解決済み] Javascriptで例外を再投与し、スタックを保持するにはどうすればよいですか?
2022-04-22 10:31:39
質問
Javascriptで、例外が発生したときに何らかの処理を行いたいが、例外はスタック上に伝播し続けさせたいとします。
try {
enterAwesomeMode();
doRiskyStuff(); // might throw an exception
} catch (e) {
leaveAwesomeMode();
throw e;
}
doMoreStuff();
leaveAwesomeMode();
このコードの問題は、例外をキャッチして再スローすると、その時点までのスタックトレース情報が失われるため、その後、より高い位置で再び例外をキャッチした場合、スタックトレースは再スローの時点までしか表示されないことです。これは、実際に例外をスローした関数が含まれていないことを意味し、最悪です。
結局のところ、少なくともChromeではtry..finallyが同じ動作をしています(つまり、正確には再スローが問題なのではなく、例外ハンドラブロックが全く存在しないことが問題なのです)。
どなたか、Javascriptで例外を再投入しても、それに関連するスタックトレースを保存する方法をご存じないでしょうか?そうでなければ、例外が発生したときに完全なスタックトレースをキャプチャしながら、例外セーフのクリーンアップハンドラを追加する他の方法を提案するのはどうでしょうか?
ご指摘ありがとうございます :)
解決方法は?
これはChromeのバグです。 例外を再投与すると、コールトレースが保存されるはずです。
http://code.google.com/p/chromium/issues/detail?id=60240
回避策を知らない。
finallyの問題は見当たりません。 finallyの後に例外が無言でエラーコンソールに表示されないケースはありますが、これは開発ビルドで修正されているようです。
関連
-
Vueの一般的な組み込みディレクティブの説明
-
[解決済み】<select>で現在選択されている<option>をJavaScriptで取得するにはどうすればよいですか?
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Vueにシンプルなメモ帳機能を実装
-
Vueの「データを聴く」原則を解説
-
[解決済み] 配列の結合時に未定義のプロパティ 'push' を読み込むことができない
-
[解決済み】TypeError: Router.use() はミドルウェアの関数を要求しているが、Object を取得した。
-
[解決済み】「X-Frame-Options」を「SAMEORIGIN」に設定したため、フレームでの表示を拒否された。
-
[解決済み】JavaScriptエラー(Uncaught SyntaxError: Unexpected end of input)
-
[解決済み】エラー。Ionic使用中にモジュール '../lib/utils/unsupported.js' が見つかりませんでした。
-
JavaScriptのStringに関する共通メソッド
-
OSSアップロードエラーを解決する: net::ERR_SSL_PROTOCOL_ERROR
-
jq は html ページとデータを動的に分割する。