13

私たちはWindowsを使用しており、アプリケーションが予期せず終了するすべてのMiniDumpWriteDumpシナリオでクラッシュダンプ(おそらくを使用)を取得したいと考えています。

これまでに、以下を特定して設定しました。

  • SetUnhandledExceptionFilter未処理の例外の場合(Win32および「通常の」C ++のもの)。
  • _set_invalid_parameter_handlerCRTの無効な引数の処理用
  • _set_abort_behavior加えて、SIGABRTへの呼び出しを説明するハンドラーabort()

見逃したことはありますか?(非合法的に呼び出すコードExitProcessTerminateProcessまたはexitバリアントの1つをモジュロします。)


ここでのこの質問は、クラッシュダンプを取得する方法と直交していることに注意してください。たとえば、の場合にクラッシュダンプが必要な場合は、sだけを中止するため、abort常に使用する必要があります。_set_abort_behaviourexit

また、Windows7 +では、レジストリに「正しい」WERダンプ設定を設定せに設定SetUHEFするだけで、実行可能な方法になることがよくあります。

4

6 に答える 6

6

あなたがリストしたものに加えて_set_purecall_handler、さらにこの便利なコードスニペットを使用します。

void EnableCrashingOnCrashes()
{
    typedef BOOL (WINAPI *tGetPolicy)(LPDWORD lpFlags);
    typedef BOOL (WINAPI *tSetPolicy)(DWORD dwFlags);
    static const DWORD EXCEPTION_SWALLOWING = 0x1;

    const HMODULE kernel32 = LoadLibraryA("kernel32.dll");
    const tGetPolicy pGetPolicy = (tGetPolicy)GetProcAddress(kernel32, "GetProcessUserModeExceptionPolicy");
    const tSetPolicy pSetPolicy = (tSetPolicy)GetProcAddress(kernel32, "SetProcessUserModeExceptionPolicy");
    if(pGetPolicy && pSetPolicy)
    {
        DWORD dwFlags;
        if(pGetPolicy(&dwFlags))
        {
            // Turn off the filter
            pSetPolicy(dwFlags & ~EXCEPTION_SWALLOWING);
        }
    }
}

ソース: http://randomascii.wordpress.com/2012/07/05/when-even-crashing-doesnt-work/

彼のサイトにあるこれらの他の記事も、これを理解するのに役立ちまし 。 07/22/more-adventures-in-failing-to-crash-ちゃんと/

于 2013-08-01T09:20:50.127 に答える
0
于 2013-08-01T07:49:59.653 に答える