Steuern einer Remotedebugsitzung

Nachdem die Remotesitzung gestartet wurde, können Befehle entweder auf dem Debugserver oder auf dem Debugclient eingegeben werden. Wenn mehrere Clients vorhanden sind, kann jeder von ihnen Befehle eingeben. Nachdem die EINGABETASTE gedrückt wurde, wird der Befehl an den Debugserver übertragen und ausgeführt.

Wenn ein Benutzer einen Befehl eingibt, sehen alle Benutzer den Befehl selbst und seine Ausgabe. Wenn dieser Befehl von einem Debugclient ausgegeben wurde, sehen alle anderen Benutzer vor dem Befehl, für den der Benutzer den Befehl ausgestellt hat, eine Id. Befehle, die vom Debugserver ausgegeben werden, weisen dieses Präfix nicht auf.

Nachdem ein Befehl von einem Benutzer ausgeführt wurde, wird anderen Benutzern, die über KD oder CDB verbunden sind, keine neue Eingabeaufforderung angezeigt. Auf der anderen Seite sehen Benutzer von WinDbg die Eingabeaufforderung im unteren Bereich des Debuggerbefehlsfensters kontinuierlich, auch wenn die Debugger-Engine ausgeführt wird. Beides sollte kein Grund zur Alarmierung sein; Jeder Benutzer kann jederzeit einen Befehl eingeben, und die Engine führt diese Befehle in der Reihenfolge aus, in der sie empfangen wurden.

Aktionen, die über die WinDbg-Schnittstelle vorgenommen werden, werden auch vom Debugserver ausgeführt.

Kommunikation zwischen Benutzern

Wenn ein neuer Debugclient eine Verbindung mit der Sitzung herstellt, wird allen anderen Benutzern die Meldung angezeigt, dass dieser Client eine Verbindung hergestellt hat. Wenn ein Client die Verbindung trennt, wird keine Meldung angezeigt.

Der Befehl .clients (Debugclients auflisten) listet alle Clients auf, die derzeit mit der Debugsitzung verbunden sind.

Der Befehl .echo (Echo Comment) ist nützlich, um Nachrichten von einem Benutzer an einen anderen zu senden.

WinDbg-Arbeitsbereiche

Wenn WinDbg als Debugclient verwendet wird, speichert der Arbeitsbereich nur Werte, die über die grafische Benutzeroberfläche festgelegt wurden. Über das Fenster Debuggerbefehl vorgenommene Änderungen werden nicht gespeichert. (Dadurch wird sichergestellt, dass nur vom lokalen Client vorgenommene Änderungen widerspiegelt werden, da das Debuggerbefehlsfenster Eingaben von allen Clients sowie vom Debugserver akzeptiert.)

Dateipfade

Der Symbolpfad, der Pfad des ausführbaren Images und der Dll-Pfad der Erweiterung werden als Dateipfade relativ zum Installationsordner Debugtools für Windows auf dem Debugserver interpretiert.

Wenn WinDbg als Debugclient verwendet wird, verfügt es auch über einen eigenen lokalen Quellpfad . Alle quellbezogenen Befehle greifen auf die Quelldateien auf dem lokalen Computer zu. Daher müssen die richtigen Pfade auf jedem Client oder Server festgelegt werden, der Quellbefehle verwendet.

Dieses System mit mehreren Pfaden ermöglicht es einem Debugclient, quellbezogene Befehle zu verwenden, ohne die Quelldateien tatsächlich mit anderen Clients oder dem Server zu teilen. Dies ist nützlich, wenn es private oder vertrauliche Quelldateien gibt, auf die einer der Benutzer Zugriff hat.

Abbrechen des Debugservers

Der Befehl .endsrv (End Debugging Server) kann verwendet werden, um einen Debugserver zu beenden. Wenn der Debugger mehrere Debugserver eingerichtet hat, können Sie einige davon abbrechen, während andere ausgeführt werden.

Das Beenden eines Servers verhindert, dass zukünftige Clients daran angefügt werden. Clients, die derzeit über den Server angefügt sind, werden nicht abgeschnitten.

Beenden des Debuggers und Beenden der Sitzung

Um einen Debugclient zu beenden, ohne den Server zu beenden, müssen Sie einen Befehl von diesem bestimmten Client ausgeben. Wenn dieser Client KD oder CDB ist, drücken Sie STRG+B , um den Client zu beenden. Wenn Sie ein Skript zum Ausführen von KD oder CDB verwenden, verwenden Sie .remote_exit (Debugclient beenden). Wenn es sich bei diesem Client um WinDbg handelt, wählen Sie im Menü Datei die Option Beenden aus, um den Client zu beenden.

Um die gesamte Sitzung zu beenden und den Debugserver zu beenden, verwenden Sie den Befehl q (Quit). Dieser Befehl kann von jedem Server oder Client eingegeben werden und beendet die gesamte Sitzung für alle Benutzer.