2016-06-17 18 views
3

Ich habe meine Windows 7 konfiguriert, um Mini-Dump-Dateien bei Abstürzen zu erstellen, aber als meine Anwendung abstürzte, wurde keine Speicherabbilddatei erstellt. Die Suche nach Antwort hat mir eher confused bezüglich wann sind Dump-Dateien erstellt, wenn Windows abstürzt oder meine Anwendung abstürzt?Wann werden Speicherabbilddateien genau erstellt?

In meinem Fall suche ich nach Dump-Datei, wenn meine Anwendung abstürzt. Ich erhalte einen typischen Crash-Dialog, das besagt:

TheApp Anwendung

Windows kann online für eine Lösung des

Problem gestoppt hat überprüfen

-> überprüfen Sie online für eine Lösung und schließen Sie das Programm

-> das

Programm schließen

-> Debug das Programm

Also kann ich Dump-Datei für meine Anwendung generieren, wenn es abstürzt? Ich kann diesen Fehler auf dem Entwicklungscomputer nicht erzeugen, deshalb möchte ich von der Speicherauszugsdatei zurückgehen. Gibt es eine andere Option, um die Quelle des Fehlers (zum Quellcode) zurückzuverfolgen?

+0

Sie können einen Dump von einem beliebigen laufenden Prozess im Task-Manager erstellen. – antlersoft

+0

@antlersoft das wäre was ich brauche, ist es erstellt, wenn es abstürzt? Wenn Sie mich darauf hinweisen können, wie es gemacht wird. – zar

+0

Wenn * jemand * MiniDumpWriteDump() aufruft. Google "wer erstellt dump", wenn Sie es automatisieren wollen. –

Antwort

4

Zunächst einmal gibt es verschiedene Orte, an denen eine "create a minidump on crash" -Einstellung konfiguriert werden kann, die völlig anders sind.

  1. Sie können Windows so konfigurieren, einen Kernel Dump-Datei zu erstellen, wenn Windows abstürzt, das heißt, wenn ein Bluescreen des Todes (BSOD) auftritt.Dies wird im folgenden Bildschirm auf Windows 7 durchgeführt:

    Kernel minidump for Windows crashes

  2. Sie können Windows so konfigurieren, eine Benutzermodus Dump-Datei zu erstellen, wenn eine Anwendung abstürzt, dh anstelle der „Windows-Fehlerberichterstattung“ Dialog der würde normalerweise erscheinen. Um dies zu tun, und Sie wissen, dass im Voraus, dann konfigurieren Sie einen Registrierungsschlüssel namens LocalDumps (MSDN). Standardmäßig werden Dumps unter %LOCALAPPDATA%\CrashDumps erstellt und sie haben das Namensschema app.exe.<PID>.dmp.

    WER dialog

  3. Aus Gründen der Vollständigkeit, könnte es andere Auslöser sein. Der einzig sichere Weg zu sagen ist: wenn die Methode MiniDumpWriteDump (MSDN) aufgerufen wird.

Ich bin mir ziemlich sicher, dass Sie Option wollen 2 der oben genannten. Wenn Sie Probleme damit haben, sehen Sie, ob alle conditions for LocalDump erfüllt sind.

Die Antwort von @antlersoft funktioniert nicht, aus den Gründen I have posted in my blog: Zum Zeitpunkt der das Dialogfeld angezeigt wird, hat Windows einen Haltepunkt ausgelöst, um die Anwendung zu stoppen und es hat einen Aufruf der Windows-Fehlerberichterstattung eingefügt. Alles in allem kein guter Ausgangspunkt für das Debugging.

Was funktionieren würde, ist:

  1. einen Debugger Ihrer Wahl anbringen
  2. Presse "Go" im Debugger
  3. drücken Sie die Schaltfläche "Debug" des WER Dialog
  4. die Warnung bestätigen über den Debugger, der bereits angeschlossen ist
  5. klicken Sie auf "Nein", wenn aufgefordert, das Debuggen mit dem ausgewählten Debugger
starten

Es wird nicht empfohlen, den Task-Manager zum Erstellen eines Crash-Dumps zu verwenden, da er die Bitterkeit der Anwendung nicht berücksichtigt, was später Probleme verursachen kann. Siehe ways to create good and useful crash dumps.

+0

Sehr nützliche Antwort; kannte den LocalDump-Registrierungsschlüssel nicht. – shrike

+0

Danke und ja ich will sicher # 2. Du hilfst mir, meine Verwirrung zu klären, dass, wenn ich 'user mode' dump ausgewählt habe, ich tatsächlich erwarten sollte, dass eine Mini-Dump-Datei automatisch generiert wird. Aber wie lautet der Name der Datei und wo wird sie erzeugt? – zar

+0

Und ich folgte @antlersoft Antwort und testete eine neue Dummy-Anwendung, die ich absichtlich abstürzen, und ich konnte tatsächlich Dump-Datei generieren, indem Sie in der Taskleiste mit der rechten Maustaste darauf klicken, ohne Debugger anzuhängen. Dieser Ansatz scheint in einer einfachen Demo-Anwendung zu funktionieren, aber ich untersuche immer noch das Problem auf der eigentlichen ausführbaren Datei. – zar

1

Minidump wird erstellt, wenn Windows abstürzt. Es ist nicht zum Absturz der Anwendung gedacht.

Wenn Sie Abstürze Ihrer Anwendung debuggen möchten, können Sie sie nach dem Start an einen Debugger anhängen. Klicken Sie auf die Schaltfläche "Debug", wenn die Anwendung abstürzt. Dazu können Sie beispielsweise den Debugger von MS Visual Studio verwenden.

Siehe diese Seite für Hilfe, ein Verfahren zu MS Visual Studio-Debugger auf Befestigung: https://msdn.microsoft.com/en-us/library/3s68z0b3.aspx

EDIT: Folgender Text entfernt, da dies möglicherweise nicht wie erwartet (Kommentar von Thomas)

Sie können Erstellen Sie auch eine Dump-Datei von Task-Manager, aber Sie benötigen noch einen Debugger, um es zu analysieren, und tatsächlich bin ich nicht sicher, dass Sie in der Lage sein werden, die Dump-Datei an dem Punkt zu erhalten, an dem die Anwendung abstürzt. Der beste Weg besteht darin, den Prozess auf dem Zielcomputer zu debuggen, indem Sie ihn entweder nach dem Start oder nach einem Absturz an den Debugger anfügen.

+0

Das Problem ist, dass der Absturz in Release Build auf dem Zielcomputer passiert. Ich könnte immer Debugger installieren, aber es passiert nicht, wenn ich es von der IDE starte. – zar

+0

Sie können eine Datei an den Debugger anhängen, selbst wenn sie über die Befehlszeile gestartet wird. Starten Sie einfach den Debugger und klicken Sie auf "Prozess anhängen". Wählen Sie dann den Prozess in der Liste der laufenden Prozesse aus. Sie können es auch anhängen, wenn es krach ist, indem Sie auf die Schaltfläche "Debug" klicken. – shrike

+0

Der Task-Manager ist keine gute Wahl, da er keine Dumps mit der korrekten Bitness erstellt. –

1

Wenn Sie den Absturzdialog erhalten, gehen Sie zum Task-Manager, suchen Sie den Prozess, klicken Sie mit der rechten Maustaste auf den Prozess und wählen Sie "Create dump file". Die Speicherabbilddatei wird im Ordner AppData/Local/Temp für den Benutzer erstellt. Es heißt% AppData% \ Local \ Temp \ .DMP; Wenn Sie mehrere Objekte erstellen, wird -1.DMP usw. angezeigt. Sie können die Abbilddatei auf Ihren Entwicklungscomputer verschieben und in Visual Studio öffnen. Visual Studio verhält sich dann so, als ob Sie zum Zeitpunkt des Absturzes "Break all" getroffen hätten, während Sie den Prozess im Debugger ausgeführt haben.

+0

Das klingt vielversprechend, aber seid ihr sicher, dass es trotzdem eine Dump-Datei erstellen wird, wenn es nur eine Nachricht ausgibt, dass es _stopped_ funktioniert hat und im Wesentlichen nicht reagiert? :) – zar

+1

@zar - Der Prozess ist immer noch im Speicher, bereit für den Debugger anzuhängen, also ja können Sie einen Dump erstellen. – antlersoft

+0

Haben Sie das schon einmal gemacht und in der Folge den Dump analysiert? Sie werden es schwer haben, da es an einem Haltepunkt anhält und nicht an der Ausnahme, die Sie haben möchten. –