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