Multiprozessorsyntax

KD und WinDbg im Kernelmodus unterstützen das Debuggen mehrerer Prozessoren. Sie können diese Art des Debuggens auf jeder Multiprozessorplattform ausführen.

Prozessoren sind 0 bis n nummeriert.

Wenn der aktuelle Prozessor Prozessor 0 ist (d. a. wenn es der Prozessor ist, der den Debugger derzeit aktiv hat), können Sie die anderen nicht aktuellen Prozessoren (Prozessoren eins bis n) untersuchen. Sie können jedoch nichts an den nicht aktuellen Prozessoren ändern. Sie können nur deren Status anzeigen.

Auswählen eines Prozessors

Sie können den Befehl .echocpunum (SHOW CPU Number) verwenden, um die Prozessornummern des aktuellen Prozessors anzuzeigen. Die Ausgabe dieses Befehls ermöglicht es Ihnen, sofort anhand des Texts in der Kerneldebugaufforderung zu erkennen, wann Sie an einem Mehrprozessorsystem arbeiten.

Im folgenden Beispiel gibt 0: vor der kd-Eingabeaufforderung> an, dass Sie den ersten Prozessor auf dem Computer debuggen.

0: kd>

Verwenden Sie den Befehl ~s (Aktuellen Prozessor ändern), um zwischen Prozessoren zu wechseln, wie im folgenden Beispiel gezeigt.

0: kd> ~1s
1: kd>

Jetzt debuggen Sie den zweiten Prozessor auf dem Computer.

Möglicherweise müssen Sie die Prozessoren auf einem Multiprozessorsystem ändern, wenn ein Fehler auftritt und Sie die Stapelüberwachung nicht verstehen können. Der Bruch ist möglicherweise auf einem anderen Prozessor aufgetreten.

Angeben von Prozessoren in anderen Befehlen

Sie können vor mehreren Befehlen eine Prozessornummer hinzufügen. Dieser Zahl wird keine Tilde (~) vorangestellt, außer im Befehl ~S .

Hinweis Beim Debuggen im Benutzermodus wird die Tilde verwendet, um Threads anzugeben. Weitere Informationen zu dieser Syntax finden Sie unter Threadsyntax.

Prozessor-IDs müssen nicht explizit verwiesen werden. Stattdessen können Sie einen numerischen Ausdruck verwenden, der in eine ganze Zahl aufgelöst wird, die einer Prozessor-ID entspricht. Verwenden Sie die folgende Syntax, um anzugeben, dass der Ausdruck als Prozessor interpretiert werden soll.

||[Expression]

In dieser Syntax sind die eckigen Klammern erforderlich, und Expression steht für jeden numerischen Ausdruck, der in eine ganze Zahl aufgelöst wird, die einer Prozessor-ID entspricht.

Im folgenden Beispiel ändert sich der Prozessor abhängig vom Wert eines benutzerdefinierten Pseudoregisters.

||[@$t0]

Beispiele

Im folgenden Beispiel wird der Befehl k (Display Stack Backtrace) verwendet, um eine Stapelablaufverfolgung aus Prozessor 2 anzuzeigen.

1: kd> 2k 

Im folgenden Beispiel wird der Befehl r (Registers) verwendet, um das eax-Register von Prozessor 3 anzuzeigen.

1: kd> 3r eax 

Der folgende Befehl gibt jedoch einen Syntaxfehler aus, da Sie den Status eines anderen Prozessors als des aktuellen Prozessors nicht ändern können.

1: kd> 3r eax=808080 

Haltepunkte

Während des Kerneldebuggens gelten die Befehle bp, bu, bm (Set Breakpoint) und ba (Break on Access) für alle Prozessoren eines Computers mit mehreren Prozessoren.

Wenn der aktuelle Prozessor beispielsweise drei ist, können Sie den folgenden Befehl eingeben, um einen Haltepunkt bei SomeAddress zu setzen.

1: kd> bp SomeAddress 

Dann verursacht jeder Prozessor (nicht nur prozessor1), der an dieser Adresse ausgeführt wird, eine Haltepunktfalle.

Anzeigen von Prozessorinformationen

Sie können die Erweiterung "!running" verwenden, um die status jedes Prozessors auf dem Zielcomputer anzuzeigen. Für jeden Prozessor kann !running auch die aktuellen und nächsten Threadfelder aus dem Prozesssteuerungsblock (PRCB), den Status der 16 integrierten Spinlocks in der Warteschlange und eine Stapelüberwachung anzeigen.

Sie können die Erweiterungen !cpuinfo und !cpuid verwenden, um Informationen zu den Prozessoren selbst anzuzeigen.