例外がある場合は、ダンプファイルを作成する必要があります。
__try{...}
とを使わずにそうすることは可能__except(e){...}
ですか?
コールバック関数を作成したり、システムクラッシュを待機しているアクションを登録したりする方法はありますか?
前もって感謝します。
例外がある場合は、ダンプファイルを作成する必要があります。
__try{...}
とを使わずにそうすることは可能__except(e){...}
ですか?
コールバック関数を作成したり、システムクラッシュを待機しているアクションを登録したりする方法はありますか?
前もって感謝します。
signal
はい、例外を含む特定のシグナルのコールバックを登録するために使用できます。
例外処理の基本的な機能は、エラーが発生したときに、ハンドラーが現在の関数呼び出し階層の上位にある例外ハンドラーに制御を移すことです。標準Cには、これを実現するメカニズムがあります:setjmp()およびlongjmp()。これとこれは、Cでの例外処理について説明している2つの優れた記事です。MicrosoftVisualCを使用する場合は、try-exceptステートメントを参照してください。これにより、通常は実行を終了するイベントが発生したときに、アプリケーションがプログラムを制御できるようになります。 。
Cで独自の例外スタイルの処理を実装する場合は、setjmp()とその仲間がいますが、これは黒魔術であり、注意しないと足を撃ち抜くのに適した方法であることに注意してください。
その他のエラーについては、「例外」の意味によって異なります。ライブラリ関数を呼び出すときのエラー(この場合は戻り値を適切にチェックする必要があります)またはSEGVのいずれかを意味していると考えられます。この場合、SIGSEGVを取得し、プロセスはすぐに終了します。手がかりを与えるために使用するシグナルハンドラーを作成できますbacktrace()
が、それ以上のことはできません。
プログラムまたはシステムのクラッシュは、通常、Cの範囲外です。そのようなものを検出して処理するには、OSの機能を調べる必要があります(もちろん、OSに依存します)。
一般的な意味での「例外」の場合、例外処理を実行するための古いCの典型的なイディオムはでしたgoto
。「例外ハンドラー」として機能するラベルをreturnステートメントの前に置き、そのラベルを検出して例外条件を実行する呼び出しを行いますgoto
。