2014-02-19 13 views
6

Ich habe einen Crash-Dump für eine Kundenanwendung, die mit einer sehr alten Version unserer DLL (Release-Build, keine Originalsymbole) erstellt wurde, die ich in WinDbg analysiert habe.Crash-Dump - WinDbg - Erzwingen PDB-Dateien zum Abgleich funktioniert nicht?

Um weitere Informationen zu erhalten, habe ich die DLL im Release-Modus mit Symbolen dieses Mal neu erstellt, mit der gleichen Compiler-Version und ich glaube, die gleichen Einstellungen wie wenn die DLL ursprünglich erstellt wurde. Ich habe die Symboldatei zu meinem Symbolpfad hinzugefügt, aber die WinDbg-Erweiterung! Itoldyouso teilt mir mit, dass das Modul im Dump nicht mit der PDB-Datei übereinstimmt. Die Aktivierung von SYMOPT_LOAD_ANYTHING hilft ebenfalls nicht.

! Itoldyouso sagt mir, dass sie nicht übereinstimmen, weil das Modul kein pdb sig (Wert 0) hat, im Gegensatz zu der neu erstellten Symboldatei, die ich gemacht habe (mit einem gültigen pdb sig). Wie bekomme ich sie zusammen?

Antwort

9

Haben Sie versucht .reload /i foo.dll?

Für ausführliche Ausgabe Versuch:

!sym noisy;.reload /i foo.dll;x foo!*test*

+0

Ja, es lädt die Symbole von foo, aber in der ausführlichen Ausgabe sehe ich die fehlende Übereinstimmung auch gemeldet: "DBGENG: foo.dll hat nicht übereinstimmende Symbole - geben Sie" .hh dbgerr003 " für Details " – JosephA

+0

Natürlich werden sie als nicht übereinstimmend gemeldet, da sie nicht erstellt wurden, als die DLL erstellt wurde. Aber solange Sie den gleichen Compiler und die gleiche Einstellung verwenden (was Sie erwähnt haben) UND der Quellcode sich überhaupt nicht geändert hat, sollten die Symbole funktionieren. –

+0

Ich nehme an, ich ging von der Annahme aus, wenn ich keine Übereinstimmung habe, kann ich dem Callstack einfach nicht vertrauen, obwohl Sie vielleicht, wie Sie sagten, niemals passen werden, aber vielleicht kann ich trotzdem einen meist gültigen Callstack haben. – JosephA

2

Seine schade, dass Sie nicht über die passenden Symbole für Ihre DLL :(Wie pro mein Verständnis, jeder Versuch, jetzt in der Lage, erhalten Sie nicht ein. genaue PDB passende

einige alte Threads Recycling, die helfen sollten.

Is it possible to (re)create a PDB file after a DLL is made

Tool to find if dll (or) exe and PDB file match

würde Ihre beste Wette

eine sein. Synchronisieren Sie den Code mit dem Zeitpunkt, zu dem die DLL freigegeben wurde

b. Erstellen und erstellen Sie PDB mit demselben Werkzeugsatz.

c. Verwenden Sie die Option .reload/i, um Symbole zu laden

Verwandte Themen