0

私はC++でpantheiosログライブラリを使用していますが、pantheiosがセグメンテーション違反をキャッチできるかどうかがわかりませんでした。その後、終了する前にバッファデータを強制的に出力します。

セグメンテーション違反をキャッチすることはできますが、ログを含むバッファーを最終的に印刷する方法が見つかりませんでした。

Rgds、

4

2 に答える 2

1

ライブラリがシグナルハンドラーを登録しようとするのは悪い習慣だと確信しているので、pantheiosがこれを行ったら驚くでしょう。

シグナルを有効に処理できると思われる場合は、シグナルを自分でキャッチする必要があります。保留中のログ バッファを空にする必要があり、最初にセグメンテーション違反を引き起こしたデータをログに記録しようとするアクションではなかったことは確かですか?

于 2012-06-20T07:28:19.533 に答える
1

ここには恐ろしい誤解があります: セグメンテーション違反の原因を理解していますか?

些細なケースでは、null 逆参照によってセグメンテーション違反が発生します。問題は一般的に見つけやすいため、修正は簡単です。

ただし、厄介なケースでは、セグメンテーション違反がメモリ破損によってトリガーされ、通常のポインターが期待される場所にガベージが書き込まれ、必要のないメモリに到達しようとします。

ここで、segfault のハンドラーを登録するとします。明らかに、あなたが些細なケースにいるのか厄介なケースにいるのかを区別することはできないので、メモリが破損していて信頼できないと想定する必要があります...

ログ メッセージが破損しないと思われる理由は何ですか?

健全なライブラリは、segfault を処理しようとするべきではありません。

segfault の場合、メモリ状態をコア ダンプ ファイルにダンプし、ハード クラッシュします。記憶を信頼できないと、意味のある行動をとることはできません。

于 2012-06-20T08:54:49.287 に答える