4

アクセスできない顧客のマシン (WinXP SP2) に、起動時にクラッシュする Win32 EXE (管理されていない C++) があります。これをトラブルシューティングする最善の方法は、(ミニ) ダンプを取得し、後で windbg などで分析することだと思います。

さて、私は通常、お客様に Debugging Tools for Windows をインストールして実行するように伝えます。

cscript adplus.vbs -crash

ただし、起動時にクラッシュするアプリには adplus を使用できないようです ( http://support.microsoft.com/kb/q286350/は、「次の状況では ADPlus を使用しないでください: プログラムをトラブルシューティングする必要がある場合または起動中に予期せず終了するプロセス」)。同じ記事に「ユーザー モード プロセス ダンプを使用する」とありますが、うまくインストールできませんでした。

Win32 で起動時にクラッシュするプロセスのダンプを取得する方法はありますか?

4

4 に答える 4

13

または、未処理の例外が発生したときにプロセス ダンプを自動的に作成する独自のダンプ生成フレームワークをセットアップすることもできます。これにより、クライアントが Windbg をインストールする必要がなくなります。

SetUnhandledExceptionFilter Win32 API を使用して、アプリケーションの起動時にアプリケーション レベルの例外ハンドラーを登録します。登録されたコールバック関数は、処理されない例外が発生するたびに呼び出されます。その後、DbgHelp.dll の MiniDumpWriteDump API を使用してプロセス ダンプを作成できます。

サンプルコード:-

LONG WINAPI My_UnhandledExceptionFilter(struct _EXCEPTION_POINTERS* ExceptionInfo)
{
    HANDLE hFile = CreateFile("FileName",
            GENERIC_WRITE,
            0,
            NULL,
            CREATE_ALWAYS,
            FILE_ATTRIBUTE_NORMAL,
            NULL);

    MINIDUMP_EXCEPTION_INFORMATION aMiniDumpInfo;
    aMiniDumpInfo.ThreadId = GetCurrentThreadId();
    aMiniDumpInfo.ExceptionPointers = ExceptionInfo;
    aMiniDumpInfo.ClientPointers = TRUE;

    MiniDumpWriteDump(GetCurrentProcess(),
            GetCurrentProcessId(),
            hFile,
            (MINIDUMP_TYPE) (MiniDumpWithFullMemory|MiniDumpWithHandleData),
            &aMiniDumpInfo,
            NULL,
            NULL);

    CloseHandle(hFile);

    return EXCEPTION_EXECUTE_HANDLER;
}


int main(int argc, char* argv[])
{
    SetUnhandledExceptionFilter(&My_UnhandledExceptionFilter);

    // User code throwing exception..

    return 0; 
}

注意:- 登録された例外フィルタは、プロセスのデバッグ中は呼び出されません。したがって、デバッグ中に例外フィルター関数にブレークポイントを配置すると、未処理の例外が発生した後でもヒットしなくても驚かないでください。

于 2009-03-31T05:20:04.347 に答える
7

クライアントマシンにWinDBGをインストールし、「イメージファイル実行オプション」を使用して、プロセスが開始されたらWinDBGを開くように設定できます。次に、クラッシュプロセスを実行すると、WinDBGがすぐに開きます。g(Go)を押してプロセスがクラッシュするのを待ってから、「。 dump/mfhdumpFileName.dmp」と入力します。これで、デバッグできるダンプファイルができました。

于 2009-03-30T09:46:07.443 に答える
2

Vista SP1 のクラッシュを収集する良い方法を次に示します。

http://msdn.microsoft.com/en-us/library/bb787181(VS.85).aspx

マシンに何もインストールする必要はありません。

于 2009-08-13T20:48:17.490 に答える
0

クライアント マシンに開発者ツールをインストールするのは私の最後の手段です。特に、あなたのために機能する代替手段がある場合、私はその考えが嫌いであることを認めなければなりません。

最初にWinQualにサインアップします。これで、顧客からのクラッシュ ダンプやその他のエラーに自動的にアクセスできるようになります。これは無料のサービスであることを思い出すと、使用しない理由はありません。

WinQual からクラッシュ ダンプが届くまでにはしばらく時間がかかる可能性が高いため、特にアプリケーションがクラッシュした場合は、顧客への対応をもう少し迅速に行うことが常に望ましいので、Dr. Watsonを使用してください。クラッシュが発生したときのことを思い出すと、ダイアログをクリックする前に、[スタート] -> [ファイル名を指定して実行] またはコマンド ラインからdrwatsn32を実行すると、ワトソン博士がポップアップ表示されます。この時点でクラッシュ ダイアログを閉じると、クラッシュ ダンプ ファイルが生成されます。これが失敗した場合は、コマンド ラインで-iパラメーターを指定して実行し、ワトソン博士をインストールしてください。

于 2009-08-14T12:32:57.263 に答える