私は何が起こったのかを確認するには、このテストをした:try/catchでsegfaultを捕まえることは可能ですか?
try
{
int *x = 0;
*x = 1234;
}
catch(...)
{
cout << "OK";
}
しかし、それはセグメンテーションフォルトをスローし、なぜそれがセグメンテーションフォルトをキャッチしないのですか?
私は何が起こったのかを確認するには、このテストをした:try/catchでsegfaultを捕まえることは可能ですか?
try
{
int *x = 0;
*x = 1234;
}
catch(...)
{
cout << "OK";
}
しかし、それはセグメンテーションフォルトをスローし、なぜそれがセグメンテーションフォルトをキャッチしないのですか?
いいえ、できません。
SEGFAULT
は例外ではありません。
あなたが表示するコードは、単に未定義の動作であり、何かが起こる可能性があります。それが例外をスローするという保証はありません。
この回答はWINDOWSに固有です。
構造化例外処理を使用することができます。あなたがあなたのビジネスを取り扱い、ご登録された関数を定義したアプリケーション
SetUnhandledExceptionFilter(UnhandledExceptionFilterFunction);
の先頭に関数を登録する必要が
:
あなたが「SetUnhandledExceptionFilter」 https://msdn.microsoft.com/en-us/library/ms680634(v=vs.85).aspx
の使用プロトタイプを呼び出す必要があります。 通常、人々はコアダンプを収集し、電子メールを開発チームに送信します。
LONG WINAPI UnhandledExceptionFilterFunction(PEXCEPTION_POINTERS exception)
{
// The exception information is available in PEXCEPTION_POINTERS
}
は、ここでは、 "PEXCEPTION_POINTERS" で入手例外レコードのリストがあるPEXCEPTION_POINTERS
https://msdn.microsoft.com/en-us/library/windows/desktop/ms679331(v=vs.85).aspx
のリンクの下に参照してください。最初のものは、あなたが、例外にセグメンテーション違反によってトリガ `SIGSEGV`信号を変換することができるかもしれOSに応じて、(LINUX用語のセグメンテーション違反で)「EXCEPTION_ACCESS_VIOLATION」
https://msdn.microsoft.com/en-us/library/windows/desktop/aa363082(v=vs.85).aspx
ですが、やってトリッキーです正しく –
segfaultはシグナルではありませんか? – cheroky
@cheroky _ "セグメンテーションは例外ではありませんか?" –