Frage

Ich habe ein Programm von einem Kunden entwickelt, der er erlebt, wenn er eine bestimmte Operation macht.Dies geschieht nicht immer an derselben Stelle und auf denselben Daten, und außerdem ist es nicht geschehen, noch in meiner lokalen Entwicklungsmaschine oder in meiner testvirtuellen Maschine (der frei von allen Entwicklungsgeräten ist).

Angesichts dieser Bedingungen habe ich mich entschieden, mit der Karte zusammenzuarbeiten (aktiviert, um mit der Option Eigenschaften zu konfigurieren -> Linker-> Debugger mit Option / Karte), um zu sehen, welche Funktion absturz ist.

Wenn ich richtig verstanden habe, wenn das Programm abstürzt, um den Offset-Fehler zu überprüfen, suchen Sie in meiner Karte unter der Spalte RVA + BASE:

generasacodicetagpre.

eigentlich tritt mein absturz bei offset vor:

attreacodicetagpre, also sollte ich denken, dass es irgendwo in der Methode ist:

generasacodicetagpre.

Das ist jedoch nicht absolut möglich, so dass angenommen wird, dass der Computer nicht falsch sein kann, ich bin derjenige, der es schlecht macht.

Kann jemand mir erklären, wie ich die Karte auf korrekte Weise lesen kann?

War es hilfreich?

Lösung

Lesen von Kartendateien, um den Crash-Standort herauszufinden, wird in diesem Code-Projekt-Artikel gut erklärt.

http://www.codeproject.com / artikel / 3472 / finding-crash-information-using-the-map-file

Hoffnung hilft.

Andere Tipps

Bauen Sie nicht die Mühe - erstellen Sie stattdessen das Projekt mit aktivierten Symbolen und streifen Sie in eine PDB-Datei.

Ändern Sie das Programm ein wenig, um einen Minidump zu schreiben, wenn er mit einem ungehinderte Ausnahmehandler

Geben Sie dem Kunden das neu zusammengestellte Programm an, und wenn er stürzt, rufen Sie den Minidumpwritedump ab.

Bitten Sie den Kunden, diese .dmp-Datei an Sie zusenden, und Sie können es einfach in Visual Studio (oder Windbg) laden und die Symbole für das Programm übereinstimmen und den Code übereinstimmen. Sie sollten in der Lage sein, die genaue Codezeile und einige der beteiligten Variablen zu sehen. (Wenn Sie vs verwenden, wenn Sie die .dmp-Datei laden, ist die obere rechte Ecke eine Option, um "Debugging starten", klicken Sie auf das, da er zum Zeitpunkt des Absturzes "Debugging" starten soll)

Versuchen Sie es zuerst vor Ort, legen Sie einen DIV irgendwo in Ihrem Programm nach Null-Fehler auf und sehen Sie, ob Sie den Dump debuggen können, nachdem Sie nach dem Laufen ausgeführt wurden. Beachten Sie, dass Sie die genaue Symboldatei für jeden Bau Ihres Programms halten müssen - sie stimmen genau überein. Sie können keine Symboldatei für einen Build von einem anderen Build erwarten, selbst wenn sich nichts geändert hat.

Es gibt Tutorials für diese Art von Dingen, wie etwa dieses von codeproject , das aussieht, wie es beschreibt, was Sie brauchen.

Für das Debugging von Postmortem gibt es eine Alternative, die nicht die Verwendung einer Kartendatei erfordert würde. Es besteht es anlieb, dass Sie ein einfaches Registrierungsskript erstellen, um einige wer (Windows-Fehlerberichterstattung) Flags, um die Crash-Dump-Datei zu fangen. Erstellen Sie zuerst Ihre Anwendung mit Debug-Symbolen. Folgen Sie dann den Anweisungen für Sammeln User-Mode-Dumps . Grundsätzlich erstellen Sie einen Unterschlüssel unter der Taste "LocalDumps". Diese Unterschlüssel muss der Name Ihrer Anwendung sein, z. B. "myApplication.exe". Erstellen Sie dann den "DumpCount", "Dumptype" und "DumpFolder" -Tasten / -werte. Lassen Sie den Benutzer das Registrierungsskript ausführen. Dadurch wird es ermöglichen, den Dump lokal zu fangen. Halten Sie dann den Benutzer den Absturz zwingen, die Dump-Datei zu sammeln. Der Benutzer kann dann die Dump-Datei an Sie senden, um mit den zuvor erstellten Symbolen mit den Symbolen zu debuggen. Schließlich müssen Sie ein Registrierungsskript erstellen, mit dem Sie die Tasten / Werte, die Sie der Registrierung hinzugefügt haben, entfernt.

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