サードパーティのライブラリを使用するコードがあります。__try __exceptできない場合にC++でエラーをトラップする方法
このライブラリは、時折アクセス違反の例外をスローします。基本的なtry/catchはエラーを捕捉せず、プログラムはハードクラッシュします。
代わりに__try __exceptを使用して、エラーをキャッチしてログに記録し、プログラムを正常に終了することができました。
サードパーティがちょうど彼らのライブラリを更新しており、現在はアクセス違反のエラーを引き起こしていたレコードの小さなサブセットだけでVisual Studioで
「[プログラム名]は動作を停止しました」と制作に死にます、 Microsoft Visual Studio Cランタイムライブラリが[プログラム名]に致命的なエラーを検出しました。
私は__exceptステートメントを更新して、すべてをキャッチしています(つまり、私は信じています)。
オリジナル__except:
__except (eps = GetExceptionInformation(), ((GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION)
? EXCEPTION_EXECUTE_HANDLER
: EXCEPTION_CONTINUE_SEARCH)) {
sprintf("error message");
result = 99;
}
新__except:FYI
__except (eps = GetExceptionInformation(), ((1 == 1)
? EXCEPTION_EXECUTE_HANDLER
: EXCEPTION_CONTINUE_SEARCH)) {
sprintf("error message");
result = 99;
}
アドバイスいただきありがとうございました。 __except(EXCEPTION_EXECUTE_HANDLER) 他の2つと同じ結果が出ました。私は第三者に尋ねましたが、その時間枠は修正のために長すぎる傾向があります。そのため、アクセス違反を処理する必要があったのです。 –
あなたはシンボルとソースコードにアクセスできますか?あなたは実際に例外がどのように起こっているのか把握するために、最後にそれを実際にデバッグできますか?例外が__except(EXCEPTION_EXECUTE_HANDLER)であっても決して捕捉されない場合は、ライブラリが例外を処理しようとしているので、コードが実際にそれを取得することはありません。 –
残念ながら私はアクセス権がありません。私は彼らの開発者に、例のレコードの動作を引用して質問を出し、新しい動作の前/後のバージョン番号を聞いています。ご協力ありがとうございました。 –