Windbg sollte das MS Exception-Protokoll um Thread-Namen an einen Debugger zu übergeben.
Ich kann das nicht zur Arbeit bringen. Im Netz gibt es viele Beispiele, die "~" Thread-Listen ohne Thread-Namen zeigen, und das sehe ich. Ich debugge ein .NET x86-Prozess, und ich habe versucht, die WDK 8.1 x86 und x64-Versionen von Windbg.
Weiß jemand, ob diese Funktion noch verfügbar ist? Was vermisse ich?
Bei .NET-Threads funktioniert das Folgende für "normal" Thread
s (manuell erstellte Threads, da ich keine Möglichkeit kenne, Threadpool-Threads zu benennen):
A Thread
ist eine Klasse und kann daher im verwalteten .NET-Heap gefunden werden:
Beachten Sie, dass es auch andere Ausgaben gibt, da !dumpheap
nach Teilen von Klassennamen sucht. Die Methodentabelle (MT) identifiziert jedoch eine Klasse eindeutig, also verwenden wir von jetzt an:
Dies sind die Adressen von Thread
-Objekten. Da es saubere Ausgabe ist, können wir es in einer Schleife verwenden:
Innerhalb der Schleife können wir die Adresse verwenden, um weitere Informationen über den Thread zu erhalten. Lassen Sie uns zuerst herausfinden, wie ein Thread intern aussieht:
%Vor% Bei Offset +0xC
(abhängig von der Bitness!) gibt es das m_Name
-Member. Das ist eine Zeichenfolge. Lassen Sie uns herausfinden, wie eine Zeichenfolge aussieht:
Also, das erste Zeichen der Zeichenkette hat den Offset +0x08
. Zeichenfolgen in .NET sind Unicode, daher können wir sie mit du
:
Kombinieren Sie all dieses Wissen in einem einzigen Befehl:
%Vor%(für die Lesbarkeit formatiert, lege alles in eine Zeile)
Wenn Sie das versuchen, werden Sie vielleicht etwas wie
ausgeben %Vor% Dies passiert, wenn m_Name
ist null
. Wenn Sie sich darum kümmern, können Sie eine Überprüfung auf Null hinzufügen:
(für die Lesbarkeit formatiert, lege alles in eine Zeile)
Weitere Verbesserungen:
.printf
anstelle von dd
und du
) Endergebnis:
%Vor%Weiß jemand, ob diese Funktion noch verfügbar ist?
Ja, diese Funktion ist noch verfügbar. Zumindest für native Anwendungen.
Für .NET-Apps aus: Gewusst wie: Festlegen eines Thread-Namens im verwalteten Code "Vielleicht ist es vorzuziehen, eine Ausnahme auszulösen."