2017-03-02 4 views
0

Ich habe nächsten Workflow:Warum habe ich falsche Debug-Symbole?

1) Erstellen Sie DLL-und PDB-Dateien.

2) Teile dll

3) Analize Speicherabbild von Kunden cutomer.

Wenn ich !analyze -v in WinDbg betreibe ich bekam (unten Teil Ausgabe)

.... 
MANAGED_STACK_COMMAND: _EFN_StackTrace 
PRIMARY_PROBLEM_CLASS: WRONG_SYMBOLS 
BUGCHECK_STR: APPLICATION_FAULT_WRONG_SYMBOLS 
// some callstack here 
MODULE_NAME: RTPLogic 
IMAGE_NAME: RTPLogic.dll 
DEBUG_FLR_IMAGE_TIMESTAMP: 58a43706 
STACK_COMMAND: ~541s; .ecxr ; kb 
FAILURE_BUCKET_ID: WRONG_SYMBOLS_c0000374_RTPLogic.dll!CSRTPStack::Finalize 
BUCKET_ID:  X64_APPLICATION_FAULT_WRONG_SYMBOLS_rtplogic!CSRTPStack::Finalize+1da 

Sieht aus wie wir für RTPLogic.dll falsch Debug-Symbol haben. Ich lade ChkMatch Werkzeug herunter. ich pdb Weg von windbg

0:541> !lmi RTPlogic.dll 
Loaded Module Info: [rtplogic.dll] 
     Module: RTPLogic 
..... 
      Age: 1, Pdb: D:\Work\path_to_original_pdb\RTPLogic.pdb 
    Image Type: MEMORY - Image read successfully from loaded memory. 
    Symbol Type: PDB  - Symbols loaded successfully from image header. 
       C:\ProgramData\dbg\sym\RTPLogic.pdb\9F82CDF359044635ADEBA578CA1D1D031\RTPLogic.pdb 
     Compiler: Resource - front end [0.0 bld 0] - back end [9.0 bld 21022] 
    Load Report: private symbols & lines, not source indexed 
       C:\ProgramData\dbg\sym\RTPLogic.pdb\9F82CDF359044635ADEBA578CA1D1D031\RTPLogic.pdb 

I Protokolle dieser Absteige im Zusammenhang haben, und ich sehe, dass meine Änderungen in Protokollen angezeigt. Also Kunde nicht vergessen, meine DLL zu installieren, bevor Sie den mddump bekommen. Ich betreibe ChkMatch

PS D:\tools> .\ChkMatch.exe -c "D:\Work\path_to_dll\RTPLogic.dll" "C:\Progra 
mData\dbg\sym\RTPLogic.pdb\9F82CDF359044635ADEBA578CA1D1D031\RTPLogic.pdb" 
..... 
Result: Matched 

es wie möglich, dass ich falsch Debug-Symbole in einer solchen Situation geraten?

+0

Das ist zu wenig Information, zu vage. Könnten Sie bitte eine konkrete Ausgabe veröffentlichen? Was ist die genaue Ausgabe von ChkMatch, was ist der genaue Warnungstext in WinDbg? Was ist der Symbolpfad? Verwenden beide Tools wirklich dieselben Dateien? Schreibe die Ausgabe von 'lm',' .symopt' und '.sympath' in WinDbg. Normalerweise lädt WinDbg nicht übereinstimmende Symbole überhaupt nicht. Wenn dies der Fall ist, haben Sie bereits etwas "gezwängt". –

+0

Ok, aber jetzt sieht es nach einer anderen Frage aus. –

+0

Was Sie der Frage hinzugefügt haben, bestätigt, was ich vorhatte. Ich kann jetzt Ihre Frage mit mehr Selbstvertrauen beantworten.+1 für die Nachverfolgung und Bereitstellung der notwendigen Informationen –

Antwort

1

Die Symbole für RTPLogic.dll!CSRTPStack::Finalize sind korrekt, aber andere Symbole, die zum Rekonstruieren der Aufrufliste erforderlich sind, sind falsch. Es ist wahrscheinlich, dass Sie einige Betriebssystemmethoden auf dem Aufruf-Stack haben und die Symbole für ntdll oder ähnliches fehlen.

Da mit ChkMatch nur eine einzige PDB-Datei überprüft wird, ist das Ergebnis von ChkMatch genauso zuverlässig und korrekt (für eine PDB) wie das von WinDbg (für viele PDBs) und sie widersprechen sich nicht.

Ihr Sympath enthält wahrscheinlich nur einen lokalen Pfad zu Ihren eigenen DLLs und enthält keine Informationen über den Symbolserver von Microsoft. In der Ausgabe von .sympath (die Sie schreiben nicht) erwarte ich, dass so etwas wie

0:000> .sympath 
D:\Work\path_to_dll 

Sie sehen sollten auch Microsoft Symbole enthalten, wie in How to set up symbols in WinDbg beschrieben. schauen jetzt

.symfix+ c:\symbols 
.reload /f 

Die Ausgabe von .sympath sollte wie

0:000> .sympath 
D:\Work\path_to_dll;SRV*c:\symbols*http://msdl.microsoft.com/download/symbols 

Dies sollte WinDbg in die Rekonstruktion des kompletten Call-Stack helfen, lösen OS Methoden der ntdll und andere: Um das Problem zu beheben, verwenden Sie die folgenden Befehle und damit die Nachricht "falsche Symbole" loswerden.