[解決済み] Linuxでセグメンテーションフォールトを検出する方法は?
2023-01-08 12:48:55
質問
サードパーティライブラリのクリーンアップ処理で、セグメンテーションフォールトをキャッチする必要があります。これは、私のプログラムが終了する直前に時々発生し、この本当の理由を修正することはできません。Windows プログラミングでは、__try - __catch でこれを行うことができました。同じことをするクロスプラットフォームまたはプラットフォーム固有の方法はありますか?私はLinux、gccでこれを必要とします。
どのように解決するのですか?
Linuxでも例外として扱われることがあります。
通常、プログラムがセグメンテーションフォールトを実行するとき、そのプログラムには
SIGSEGV
シグナルを送信します。 このシグナルに対して独自のハンドラを設定し、結果を軽減することができます。 もちろん、本当に
ができる
を回復できることを確認する必要があります。 あなたの場合、代わりにコードをデバッグするべきだと思います。
話を戻します。 最近、私は ライブラリ ( ショートマニュアル ) を使えば、このようなシグナルを例外に変換することができるので、次のようなコードを書くことができます。
try
{
*(int*) 0 = 0;
}
catch (std::exception& e)
{
std::cerr << "Exception caught : " << e.what() << std::endl;
}
私のx86-64 Gentooボックスで動作します。 プラットフォームに特化したバックエンド(gccのjava実装から拝借)を持っているので、多くのプラットフォームで動作します。 x86とx86-64をサポートしているだけですが、gccのソースに存在するlibjavaからバックエンドを取得することができます。
関連
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み] C++のセグメンテーションフォールトの修正
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] Linux上で動作するC++コードのプロファイリングを行うにはどうすればよいですか?
-
[解決済み] Try-catchは私のコードをスピードアップさせるか?
-
[解決済み] 複数のJava例外を同じcatch節でキャッチすることはできますか?
-
[解決済み] セグメンテーションフォールトとは何ですか?
-
[解決済み】プログラムを停止/終了させることなく、完全な例外トレースバックをキャッチして表示する方法は?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++