0

通常、呼び出しassert(foo())てアサーションが失敗すると、プログラムは自動的に中止されます。終了する前にいくつかのリソースをクリーンアップできるハンドラーを追加する方法はありますか?

4

2 に答える 2

3

SIGABRT信号を処理してクリーニングを行うことができます。もちろん、assert はアプリケーションをデバッグするためだけのものなので、正常に失敗するようにコードを記述するよりも、失敗の原因となっている問題を修正するだけの方が適切です。

于 2013-03-14T00:22:46.007 に答える
0

assert の全体的なポイントは、情報をダンプ__FILE__して、__LINE__abort() をすぐに呼び出すことです。それをしたくない場合は、クリーンアップハンドラーで独自のエラーチェックをロールするか、別の回答で提案されているようにして、abort() 自体をキャッチします。特定の質問に対して、 assert は単なるマクロであるため、直接フックすることはできません。章と節については、ISO C99、7.2.1、p2 を参照してください。

于 2013-03-14T00:24:48.230 に答える