Frage

Auf einer Kundenmaschine (WinXP SP2), auf die ich keinen Zugang habe, habe ich eine Win32-EXE (unmanaged C ++), die beim Start abstürzt. Ich denke, der beste Weg, dies zu beheben, ist ein (Mini-) zu erhalten Dump und analysieren es später mit windbg oder ähnliches.

Nun würde ich normalerweise den Kunden sagen, Debugging Tools für Windows zu installieren und auszuführen

cscript adplus.vbs -crash

Allerdings scheint es, dass Sie nicht adplus für Anwendungen, die Crash beim Start ( http verwenden können: //support.microsoft.com/kb/q286350/ sagt, dass „verwenden Sie ADPlus nicht in den folgenden Situationen: Wenn Sie ein Programm oder Prozess beheben müssen, die beim Starten unerwartet beendet“). Im selben Artikel sagt: „Verwendung User Mode Process Dump“, aber ich scheiterte es erfolgreich zu installieren.

Jede Vorstellung davon, wie ein Abbild eines Prozess zu erhalten, die beim Start auf Win32 abstürzt?

War es hilfreich?

Lösung

Sie können installieren WinDBG auf dem Client-Rechner und verwenden Sie dann „ Image File Execution Options “und setzen WinDBG einmal zu öffnen, dass der Prozess begonnen hat. Führen Sie dann das Krachen Prozess und WinDBG sofort öffnen. drücken Sie g (Go) und warten, bis der Prozess dann zum Absturz Typ " .dump / mfh dumpFileName.dmp ". Jetzt haben Sie Dump-Datei, die Sie debuggen können.

Andere Tipps

Alternativ können Sie Ihre eigenen Dump Generation Rahmen einrichten, die automatisch ein Prozessabbild erstellt, wenn eine Nicht behandelte Ausnahme aufgetreten ist. Dies würde vermeiden Kunden Windbg zu installieren.

Verwenden SetUnhandledExceptionFilter Win32 API, um die Anwendungsebene Exception-Handler in der Anwendung starten zu registrieren. Die registrierte Callback-Funktion wird aufgerufen, wenn es eine Ausnahme, die nicht behandelt wird. U kann den Prozess Dump mit MiniDumpWriteDump api aus DbgHelp.dll dann erstellen.

Beispielcode: -

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; 
}

NB: - Die registrierte Ausnahmefilter wird nicht aufgerufen, wenn der Prozess gedebuggt wird. Also beim Debuggen, wenn Sie Haltepunkt in der Ausnahmefilterfunktion setzen dont überrascht, wenn es nicht einmal getroffen, nachdem eine nicht behandelte Ausnahme verursachen.

Hier ist eine schöne Art und Weise Vista SP1 zu sammeln Abstürze:

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

keine Notwendigkeit, etwas an der Maschine zu installieren!

Installieren von Entwickler-Tools auf einer Client-Maschine mein letztes Mittel sein würde, muss ich zugeben, dass ich die Idee hassen vor allem, wenn es Alternativen gibt, die für Sie arbeiten.

Zuerst melden Sie sich für WinQual . Sie werden nun Zugriff auf Crash-Dumps und andere Fehler von Ihren Kunden automatisch erhalten. Soweit ich mich erinnere dies ist ein kostenloser Service, nicht kein Grund, es zu verwenden.

Da WinQual wird wahrscheinlich eine Weile dauern, bis die Crash-Dump Sie zu bekommen, und es ist immer schön, ein wenig besser auf den Kunden zu sein, besonders wenn Sie Anwendung abstürzt, verwenden Sie Dr. Watson . Soweit ich mich erinnere, wenn der Absturz auftritt, bevor auf dem Dialog klicken, können Sie drwatsn32 aus Start-> Ausführen oder die Befehlszeile und Dr. Watson nach oben öffnen laufen. An diesem Punkt den Absturzdialog abgewiesen wird eine Crash-Dump-Datei generieren. Sollte dies nicht gelingen, installieren Sie Dr. Watson indem sie sie mit der läuft -i Parameter in der Befehlszeile.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top