k, kb, kc, kd, kp, kP, kv (Display Stack Backtrace)
Die k* -Befehle zeigen den Stapelrahmen des angegebenen Threads mit zugehörigen Informationen an.
Benutzermodus, x86-Prozessor
[~Thread] k[b|p|P|v] [c] [n] [f] [L] [M] [FrameCount]
[~Thread] k[b|p|P|v] [c] [n] [f] [L] [M] = BasePtr [FrameCount]
[~Thread] k[b|p|P|v] [c] [n] [f] [L] [M] = BasePtr StackPtr InstructionPtr
[~Thread] kd [WordCount]
Kernelmodus, x86-Prozessor
[Processor] k[b|p|P|v] [c] [n] [f] [L] [M] [FrameCount]
[Processor] k[b|p|P|v] [c] [n] [f] [L] [M] = StackPtr FrameCount
[Processor] k[b|p|P|v] [c] [n] [f] [L] [M] = BasePtr StackPtr InstructionPtr
[Processor] kd [WordCount]
Benutzermodus, x64-Prozessor
[~Thread] k[b|p|P|v] [c] [n] [f] [L] [M] [FrameCount]
[~Thread] k[b|p|P|v] [c] [n] [f] [L] [M] = StackPtr FrameCount
[~Thread] k[b|p|P|v] [c] [n] [f] [L] [M] = StackPtr InstructionPtr FrameCount
[~Thread] kd [WordCount]
Kernelmodus, x64-Prozessor
[Processor] k[b|p|P|v] [c] [n] [f] [L] [M] [FrameCount]
[Processor] k[b|p|P|v] [c] [n] [f] [L] [M] = StackPtr FrameCount
[Processor] k[b|p|P|v] [c] [n] [f] [L] [M] = StackPtr InstructionPtr FrameCount
[Processor] kd [WordCount]
Benutzermodus, ARM-Prozessor
[~Thread] k[b|p|P|v] [c] [n] [f] [L] [M] [FrameCount]
[~Thread] k[b|p|P|v] [c] [n] [f] [L] [M] = StackPtr FrameCount
[~Thread] k[b|p|P|v] [c] [n] [f] [L] [M] = StackPtr InstructionPtr FrameCount
[~Thread] kd [WordCount]
Kernelmodus, ARM-Prozessor
[Processor] k[b|p|P|v] [c] [n] [f] [L] [M] [FrameCount]
[Processor] k[b|p|P|v] [c] [n] [f] [L] [M] = StackPtr FrameCount
[Processor] k[b|p|P|v] [c] [n] [f] [L] [M] = StackPtr InstructionPtr FrameCount
[Processor] kd [WordCount]
Parameter
Thread
Gibt den anzuzeigenden Threadstapel an. Wenn Sie diesen Parameter weglassen, wird der Stapel des aktuellen Threads angezeigt. Weitere Informationen zur Threadsyntax finden Sie unter Threadsyntax. Sie können Threads nur im Benutzermodus angeben.
Prozessor
Gibt den Prozessor an, dessen Stapel angezeigt werden soll. Weitere Informationen zur Prozessorsyntax finden Sie unter Multiprozessorsyntax.
b
Zeigt die ersten drei Parameter an, die an jede Funktion in der Stapelablaufverfolgung übergeben werden.
c
Zeigt eine sauber Stapelablaufverfolgung an. Jede Anzeigezeile enthält nur den Modulnamen und den Funktionsnamen.
p
Zeigt alle Parameter für jede Funktion an, die in der Stapelablaufverfolgung aufgerufen wird. Die Parameterliste enthält den Datentyp, den Namen und den Wert jedes Parameters. Bei der p
Option wird die Groß-/Kleinschreibung beachtet. Für diesen Parameter sind vollständige Symbolinformationen erforderlich.
P
Zeigt alle Parameter für jede Funktion an, die in der Stapelablaufverfolgung aufgerufen wird, z. B. den p
Parameter. P
Für werden die Funktionsparameter jedoch in einer zweiten Zeile der Anzeige ausgegeben, nicht in derselben Zeile wie der Rest der Daten.
v
Zeigt Informationen zum Auslassen von Rahmenzeigern (Frame Pointer Omission, FPO) an. Auf x86-basierten Prozessoren enthält die Anzeige auch Aufrufen von Konventionsinformationen.
n
Zeigt Framenummern an.
f
Zeigt den Abstand zwischen benachbarten Frames an. Diese Entfernung ist die Anzahl der Bytes, die die Frames auf dem tatsächlichen Stapel trennen.
L
Blendet Quellzeilen in der Anzeige aus. Bei L
wird zwischen Groß- und Kleinschreibung unterschieden.
M
Zeigt die Ausgabe mithilfe der Debuggermarkierungssprache an. Jede Framenummer in der Anzeige ist ein Link, den Sie auswählen können, um den lokalen Kontext festzulegen und lokale Variablen anzuzeigen. Informationen zum lokalen Kontext finden Sie unter .frame.
FrameCount
Gibt die Anzahl der anzuzeigenden Stapelrahmen an. Sie sollten diese Zahl im Hexadezimalformat angeben, es sei denn, Sie haben den Radix mit dem Befehl n (Zahlenbasis festlegen) geändert. Verwenden Sie den Befehl .kframes (Stapellänge festlegen), um den Standardwert anzuzeigen und den Wert zu ändern.
BasePtr
Gibt den Basiszeiger für die Stapelablaufverfolgung an. Der BasePtr
Parameter ist nur verfügbar, wenn nach dem Befehl ein Gleichheitszeichen (=) vorhanden ist.
StackPtr
Gibt den Stapelzeiger für die Stapelablaufverfolgung an. Wenn Sie und InstructionPtr
weglassenStackPtr
, verwendet der Befehl den Stapelzeiger, den das rsp-Register (oder esp) angibt, und den Anweisungszeiger, den das Rip-Register (oder eip) angibt.
InstructionPtr
Gibt den Anweisungszeiger für die Stapelablaufverfolgung an. Wenn Sie und InstructionPtr
weglassenStackPtr
, verwendet der Befehl den Stapelzeiger, den das rsp-Register (oder esp) angibt, und den Anweisungszeiger, den das Rip-Register (oder eip) angibt.
Wordcount
Gibt die Anzahl der DWORD_PTR Werte im Stapel an, die abspeichern sollen.
Environment | |
---|---|
Modi | Benutzermodus, Kernelmodus |
Targets | Liveabbild, Absturzabbild |
Plattformen | All |
Hinweise
Wenn Sie die k
Befehle , kb
, kp
, kP
oder kv
ausgeben, wird eine Stapelablaufverfolgung in einem tabellarischen Format angezeigt. Wenn das Zeilenladen aktiviert ist, werden auch Quellmodule und Zeilennummern angezeigt.
Die Stapelablaufverfolgung umfasst den Basiszeiger für den Stapelrahmen, die Rückgabeadresse und die Funktionsnamen.
Wenn Sie die kp
Befehle oder kP
verwenden, werden die vollständigen Parameter für jede Funktion angezeigt, die in der Stapelablaufverfolgung aufgerufen wird. Die Parameterliste enthält den Datentyp, den Namen und den Wert jedes Parameters.
Der Befehl ist möglicherweise langsam. Wenn MyFunction1
beispielsweise aufgerufen wird MyFunction2
, muss der Debugger über vollständige Symbolinformationen für MyFunction1
verfügen, um die Parameter anzuzeigen, die in diesem Aufruf übergeben werden. Mit diesem Befehl werden interne Microsoft Windows-Routinen nicht vollständig angezeigt, die nicht in öffentlichen Symbolen verfügbar gemacht werden.
Wenn Sie die kb
Befehle oder kv
verwenden, werden die ersten drei Parameter angezeigt, die an jede Funktion übergeben werden. Wenn Sie den kv
Befehl verwenden, werden auch FPO-Daten angezeigt.
Auf einem x86-basierten Prozessor zeigt der kv
Befehl auch aufrufende Konventionsinformationen an.
Wenn Sie den kv
Befehl verwenden, werden die FPO-Informationen am Ende der Zeile im folgenden Format hinzugefügt.
FPO-Text | Bedeutung |
---|---|
FPO: [Nicht-Fpo] | Keine FPO-Daten für den Frame. |
FPO: [N1,N2,N3] | N1 ist die Gesamtzahl der Parameter. N2 ist die Anzahl der DWORD-Werte für die lokalen Variablen. N3 ist die Anzahl der gespeicherten Register. |
FPO: [N1,N2] TrapFrame @ Address | N1 ist die Gesamtzahl der Parameter. N2 ist die Anzahl der DWORD-Werte für die Lokalen. Address ist die Adresse des Trapframes. |
FPO: TaskGate-Segment:0 | Segment ist die Segmentauswahl für das Aufgabengate. |
FPO: [EBP 0xBase] | Base ist der Basiszeiger für den Frame. |
Der kd
Befehl zeigt die rohen Stapeldaten an. Jeder DWORD-Wert wird in einer separaten Zeile angezeigt. Symbolinformationen werden für diese Linien zusammen mit zugeordneten Symbolen angezeigt. Dieses Format erstellt eine detailliertere Liste als die anderen k*
Befehle. Der kd
Befehl entspricht einem dds-Befehl (Anzeigespeicher), der die Stapeladresse als Parameter verwendet.
Wenn Sie den k
Befehl am Anfang einer Funktion verwenden (bevor der Funktionsprolog ausgeführt wurde), erhalten Sie falsche Ergebnisse. Der Debugger verwendet das Frameregister, um den aktuellen Backtrace zu berechnen, und dieses Register wird für eine Funktion erst richtig festgelegt, wenn ihr Prolog ausgeführt wurde.
Im Benutzermodus basiert die Stapelablaufverfolgung auf dem Stapel des aktuellen Threads. Weitere Informationen zu Threads finden Sie unter Steuern von Prozessen und Threads.
Im Kernelmodus basiert die Stapelablaufverfolgung auf dem aktuellen Registerkontext. Sie können den Registrierungskontext so festlegen, dass er einem bestimmten Thread, einem bestimmten Kontextdatensatz oder einem bestimmten Trapframe entspricht.
Zusätzliche Informationen
Weitere Informationen zum Register context und anderen Kontexteinstellungen finden Sie unter Ändern von Kontexten.