...すこし。この非常に単純な例が示すように、
ごくまれに (これまでに報告されたのは 1 回だけ)、私のアプリケーションの 1 つがこのようにクラッシュすることがあります。不特定の例外が発生したときに通常どおり終了したい。私の戦略は、問題を (低レベルで) ログに記録してから終了することです。アプリケーションはサブシステムの一部であり、問題が検出された場合は (再) 起動したいと考えています。C++-Builder 6 で構築され、Windows (XP...7、8 も) で動作します。abort()
おそらくエラーメッセージの原因であることがわかりました。アプリケーションには GUI があります。そのため、単に (ブロック解除) 出力をstderr
.
そして、メッセージ ボックスがユーザーに受け入れられない限り、私のアプリケーションは明らかに実行を続けます。たとえば、タイマー (上記の例ではライフビートが増加します) やプロセス間メッセージを処理し、問題を完全に認識しません。
C++ プログラムをクラッシュさせる最も簡単な方法は何ですか?に対するいくつかの回答を読んだ後、およびraise(SIGABRT) メソッドと abort() メソッドの違い、次のことを試しました
void mySignalHandler(int sig)
{
// low-level error reporting here
exit(-1);
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
signal(SIGABRT, mySignalHandler);
// some more initialisation here
}
orが呼び出された場合でも、アプリケーションを適切に終了させることができます。(また、Windows が「問題の解決策を検索」しないようにしたいと考えています。)abort()
raise(SIGABRT)
これ(中止のシグナルハンドラを登録し、そこで終了を呼び出す)はあなたの観点から信頼できますか?...または少なくとも構築できるものはありますか?