Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
KD und Kernelmodus WinDbg unterstützen das Debuggen mehrerer Prozessor. Sie können diese Art von Debugging auf jeder Multiprozessorplattform ausführen.
Prozessoren werden 0 bis n nummeriert.
Wenn der aktuelle Prozessor Prozessor 0 ist (d. a. wenn es sich um den Prozessor handelt, der den Debugger aktuell aktiviert hat), können Sie die anderen nicht aktuellen Prozessoren (Prozessoren 1 bis n) untersuchen. Sie können jedoch nichts in den nicht aktuellen Prozessoren ändern. Sie können den Zustand nur einsehen.
Auswählen eines Prozessors
Sie können den Befehl ".echocpunum" (CPU-Nummer anzeigen) verwenden, um die Prozessornummern des aktuellen Prozessors anzuzeigen. Mit der Ausgabe dieses Befehls können Sie sofort feststellen, wann Sie an einem System mit mehreren Prozessorn arbeiten, indem Sie den Text in der Kerneldebuggingaufforderung verwenden.
Im folgenden Beispiel zeigt 0: vor der kd>-Aufforderung an, dass Sie den ersten Prozessor im 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 Prozessoren in einem Multiprozessorsystem ändern, wenn ein Bruch auftritt und Sie die Stapelablaufverfolgung nicht verstehen können. Die Unterbrechung ist möglicherweise auf einem anderen Prozessor aufgetreten.
Angeben von Prozessoren in anderen Befehlen
Sie können vor mehreren Befehlen eine Prozessornummer hinzufügen. Diese Zahl steht nicht vor einer Tilde (~), mit Ausnahme des Befehls ~S .
Anmerkung Im 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 bezeichnet werden. Stattdessen können Sie einen numerischen Ausdruck verwenden, der zu einer ganzen Zahl aufgelöst wird, die einer Prozessor-ID entspricht. Um anzugeben, dass der Ausdruck als Prozessor interpretiert werden soll, verwenden Sie die folgende Syntax.
||[Expression]
In dieser Syntax sind die eckigen Klammern erforderlich, und Expression steht für einen beliebigen numerischen Ausdruck, der zu einer ganzen 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 für
Im folgenden Beispiel wird der Befehl k (Display Stack Backtrace) verwendet, um eine Stapelablaufverfolgung von 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 weist jedoch einen Syntaxfehler auf, da Sie den Zustand eines anderen Prozessors als des aktuellen Prozessors nicht ändern können.
1: kd> 3r eax=808080
Haltepunkte
Während des Kerneldebuggings gelten die Befehle bp, bu, bm (Set Breakpoint) und ba (Break on Access) für alle Prozessoren eines Prozessorcomputers.
Wenn der aktuelle Prozessor beispielsweise drei ist, können Sie den folgenden Befehl eingeben, um einen Haltepunkt bei SomeAddress einzufügen.
1: kd> bp SomeAddress
Dann führt jeder Prozessor (nicht nur Prozessor Eins), der an dieser Adresse ausgeführt wird, zu einer Haltepunktfalle.
Anzeigen von Prozessorinformationen
Sie können die !running-Erweiterung verwenden, um den 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 eingebauten Warteschlangen-Spinlocks und eine Stapelablaufverfolgung anzeigen.
Sie können die Erweiterungen !cpuinfo und !cpuid verwenden, um Informationen zu den Prozessoren selbst anzuzeigen.