[解決済み] C++の処理されない例外
2022-02-25 05:59:30
質問
C++は、処理されない例外が発生した場合に、何か視覚的なものを「表示」する方法を提供していますか?
私がしたいのは、次のようなものを作ることです。
assert(unhandled exception.msg())
が実際に発生した場合(以下のサンプルのように)。
void foo() {
throw std::exception("Message!");
}
int main() {
foo();
}
この種のコードは、(例外が処理されなかったので) すぐに終了するのではなく、カスタムアサーションメッセージ (
Message!
実際には)。
そんなことが可能なんですか?
どのように解決するのですか?
キャッチできない例外のメッセージを実際に表示する方法は、標準では規定されていません。しかし、多くのプラットフォームでは、とにかくそれが可能なのです。Windowsでは、SetUnhandledExceptionFilterを使用して、C++の例外情報を引き出すことができます。g++(の適切なバージョン)では、terminate handlerは以下のようなコードでキャッチされない例外にアクセスできます。
void terminate_handler()
{
try { throw; }
catch(const std::exception& e) { log(e.what()); }
catch(...) {}
}
で、実際に g++ のデフォルトの terminate ハンドラはこれと似たようなことをします。set_terminate で終了ハンドラを設定することができます。
要するに、C++の一般的な方法はないのですが、プラットフォームによって方法はあるのです。
関連
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み] 複数の例外を1行でキャッチする(ブロックを除く)
-
[解決済み] 複数の例外を一度にキャッチする?
-
[解決済み] 最近のPythonでカスタム例外を宣言する適切な方法?
-
[解決済み] すべての例外をキャッチする `try`/`except` ブロックはどのように書けばよいですか?
-
[解決済み] 例外を正しく無視する方法
-
[解決済み] 複数のJava例外を同じcatch節でキャッチすることはできますか?
-
[解決済み] Javaにおけるチェック済み例外とチェックされていない例外の理解
-
[解決済み] Javaにおける例外処理によるパフォーマンスへの影響とは?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー