2016-06-26 1 views
0

Nach dem Ausführen einer Reihe von Tests mit drmemory über Nacht versuche ich, die Fehler-Stacks durch Bereitstellung von pdb-Symbolen zu lösen. Die PDBs kommen aus einem großen Samba-Mapped-Repository und die Verwendung von _NT_SYMBOL_PATH zur Laufzeit verlangsamte die Dinge zu sehr.Postprocess Drmemory Fehler Stacks mit neuen Symbolen nach dem Prozess beendet

Kennt jemand ein Werkzeug, das results.txt nachbearbeitet und neue Symbole (über NT_SYMBOL_PATH oder andere) nach Bedarf zieht, um detailliertere Stapel zu erzeugen? Wenn nicht, irgendwelche Hinweise zur Anpassung von asan_symbolize.py, dies zu tun?

https://llvm.org/svn/llvm-project/compiler-rt/trunk/lib/asan/scripts/asan_symbolize.py

Was kam ich mit so weit mit dbghelp.dll up ist unten. Funktioniert aber könnte besser sein.

https://github.com/patraulea/postpdb

+0

die dLL nicht Lastweg zu sehen, dass ich verstehe, was Sie tun das heißen Sie alle Symbole ziehen wollen, die vor erforderlich sind, um den Dump zu Debuggen und verwenden Sie die Symbole in Offline-Modus, wenn ja Check-out Symchk/OM http s: //msdn.microsoft.com/en-us/library/windows/hardware/ff560061 (v = vs.85) .aspx – blabb

+0

Nein. Der Prozess ist nicht abgestürzt, alle Fehler waren nicht-fatal also was ich habe sind Stack-Traces im Ausgabeprotokoll. Ich möchte von ** libeay32.dll + 0x1234 ** zu ** libeay32.dll! SSL_new_ctx [ssl/ssl3.cpp: 1234] ** gehen. – patraulea

+0

Normalerweise gehen die Symbole in einen lokalen Cache, so dass sie nur beim ersten Mal langsam sein sollten und die Dinge normalerweise schneller werden. –

Antwort

1

ok diese Frage bezieht sich nicht von windbg zu verwenden, oder hat nichts mit _NT_SYMBOL_PATH

Dr.Memory zu tun, ist ein memory diagnostic tool verwandt valgrind und basiert auf Dynamorio instumentation framework verwendbar auf rohen nicht modifizierten Binärdateien

auf Fenster können Sie es wie drmemory.exe calc.exe von einer Eingabeaufforderung aufrufen (cmd.exe)

sobald die binäre beendet die Ausführung eine Protokolldatei results.txt auf einen Standard-Speicherort geschrieben benannt

, wenn Sie es Setup _NT_SYMBOL_PATH drmemory Ehren hatte und Symbolinformationen aus prepulled Symboldatei löst (dh * PDB) ist es nicht scheint Dateien von ms Symbolserver zum Download es einfach scheint die SRV * Cache zu ignorieren und nur das Downstream-Symbol Ordner

so, wenn die pDB-Datei fehlt oder ist nicht noch

heruntergeladen zu verwenden scheint

die results.txt enthält Stapelverfolgung wie

# 6 USER32.dll!gapfnScSendMessage +0x1ce (0x75fdc4e7 <USER32.dll+0x1c4e7>) 
# 7 USER32.dll!gapfnScSendMessage +0x2ce (0x75fdc5e7 <USER32.dll+0x1c5e7>) 

während, wenn die Symboldatei es Sie

# 6 USER32.dll!InternalCallWinProc 
# 7 USER32.dll!UserCallWinProcCheckWow 
zeigen würde

also im Grunde brauchen die Symboldatei für appplication in Frage

so wie ich kommentiert Sie die Symbole holen müssen für die exe vorhanden war in Frage

Sie können symchk auch auf einen laufenden Prozess verwenden und erstellen Sie eine Manifest-Datei und Sie können symchk auf einem Computer, der mit dem Internet zum Download verbunden ist verwenden und Symbole kopieren Sie sie in einen lokalen Ordner auf einem non_internet Maschine und Punkt _NT_SYMBOL_PATH in diesen Ordner

>tlist | grep calc.exe 
1772 calc.exe   Calculator 

>symchk /om calcsyms.txt /ip 1772 
SYMCHK: GdiPlus.dll   FAILED - MicrosoftWindowsGdiPlus- 
1.1.7601.17514-gdiplus.pdb mismatched or not found 

SYMCHK: FAILED files = 1 
SYMCHK: PASSED + IGNORED files = 27 

>head -n 4 calcsyms.txt 
calc.pdb,971D2945E998438C847643A9DB39C88E2,1 
calc.exe,4ce7979dc0000,1 
ntdll.pdb,120028FA453F4CD5A6A404EC37396A582,1 
ntdll.dll,4ce7b96e13c000,1 

>tail -n 4 calcsyms.txt 
CLBCatQ.pdb,00A720C79BAC402295B6EBDC147257182,1 
clbcatq.dll,4a5bd9b183000,1 
oleacc.pdb,67620D076A2E43C5A18ECD5AF77AADBE2,1 
oleacc.dll,4a5bdac83c000,1 

so vorausgesetzt, Sie haben die Symbole geholt wäre es einfacher, die Tests mit einem lokal im Cache gespeicherten Kopien der Symboldateien erneut ausführen

Wenn Sie die Symbole abgerufen haben, aber die Tests nicht erneut ausführen können und nur mit der Ausgabe von results.txt arbeiten müssen, müssen Sie einige Textverarbeitungsarbeiten ausführen (sed. Grep, awk.oder benutzerdefinierte Parser)

die drmemory Suite kommt mit einem symbolquery.exe im Ordner ist und es kann verwendet werden, um die Symbole von results.txt

im Beispiel zu lösen oben Sie den Offset relativ feststellen können Module wie 0x1c4e7 in der Linie # 6 USER32.dll! gapfnScSendMessage + 0x1ce (0x75fdc4e7 {USER32.dll + 0x1c4e7})

so für jede Zeile in results.txt Sie haben den Offset zu analysieren und aufrufen Symbolquery auf dem Modul wie unten

:\>symquery.exe -f -e c:\Windows\System32\user32.dll -a +0x1c4e7 
InternalCallWinProc+0x23 
??:0 

:\>symquery.exe -f -e c:\Windows\System32\user32.dll -a +0x1c5e7 
UserCallWinProcCheckWow+0xb3 

ein einfacher Test Verarbeitungs Beispiel aus einem result.txt und einer getrimmten Ausgabe

:\>grep "^#" results.txt | sed s/".*<"//g 
# 0 system call NtUserBuildPropList parameter #2 
USER32.dll+0x649d9>) 
snip 
COMCTL32.dll+0x2f443>) 

Mitteilung der comctl32.dll (es gibt eine Standard-comctl.dll in system32.dll und einige andere in winsxs Sie haben die anderen Dateien wie global.log konsultieren

symquery.exe -f -e c:\Windows\winsxs\x86_microsoft.windows.common- 
controls_6595b64144ccf1df_6.0.7601.17514_none_41e6975e2bd6f2b2\comctl32.dll -a +0x2f443 
CallOriginalWndProc+0x1a 
??:0 

symquery.exe -f -e c:\Windows\system32\comctl32.dll -a +0x2f443 
DrawInsert+0x120 <----- wrong symbol due to wrong module (late binding 
/forwarded xxx yyy reasons) 
+0

Danke, symquery.exe ist definitiv ein Ausgangspunkt. Es dauert 2-3 Sekunden pro Anruf, da msdl.microsoft.com abgefragt werden muss, aber es ist etwas. – patraulea

Verwandte Themen