Debuggen eines Benutzermodusprozesses mit WinDbg Classic
Sie können WinDbg verwenden, um an einen laufenden Prozess anzufügen oder zu spawnen und an einen neuen Prozess anzufügen.
Anfügen an einen laufenden Prozess
Es gibt mehrere Möglichkeiten, wie Sie WinDbg verwenden können, um an einen ausgeführten Prozess anzufügen. Unabhängig von der gewählten Methode benötigen Sie die Prozess-ID oder den Prozessnamen. Die Prozess-ID ist eine Vom Betriebssystem zugewiesene Nummer. Weitere Informationen zum Ermitteln der Prozess-ID und des Prozessnamens finden Sie unter Suchen der Prozess-ID.
WinDbg-Menü
Wenn Sich WinDbg im ruhenden Modus befindet, können Sie an einen ausgeführten Prozess anfügen, indem Sie im Menü "Datei" oder durch Drücken von F6 die Option "An einen Prozess anfügen" auswählen.
Wählen Sie im Dialogfeld "An Prozess anfügen" den Prozess aus, den Sie debuggen möchten, und wählen Sie "OK" aus.
Eingabeaufforderung
In einem Eingabeaufforderungsfenster können Sie an einen ausgeführten Prozess anfügen, wenn Sie WinDbg starten. Verwenden Sie einen der folgenden Befehle:
- windbg -p ProcessID
- windbg -pn ProcessName
Dabei ist ProcessID die Prozess-ID eines ausgeführten Prozesses oder ProcessName der Name eines ausgeführten Prozesses.
Weitere Informationen zur Befehlszeilensyntax finden Sie unter "WinDbg Command-Line Options".
Debugger-Befehlsfenster
Wenn WinDbg bereits einen oder mehrere Prozesse debuggt, können Sie an einen ausgeführten Prozess anfügen, indem Sie den Befehl "An Prozess anfügen" im Fenster "Debuggerbefehl" verwenden.
Der Debugger startet immer mehrere Zielprozesse gleichzeitig, es sei denn, einige ihrer Threads werden fixiert oder angehalten.
Wenn der Befehl ".attach " erfolgreich ist, wird der Debugger beim nächsten Ausbringen eines Ausführungsbefehls an den angegebenen Prozess angefügt. Wenn Sie diesen Befehl mehrmals in einer Zeile verwenden, muss die Ausführung vom Debugger so oft angefordert werden, wie Sie diesen Befehl verwenden.
Anfügen an einen laufenden Prozess, der nicht invasiv ist
Wenn Sie einen ausgeführten Prozess debuggen und nur minimal in der Ausführung stören möchten, sollten Sie den Prozess nicht invasiv debuggen.
WinDbg-Menü
Wenn Sich WinDbg im ruhenden Modus befindet, können Sie einen laufenden Prozess nicht invasiv debuggen, indem Sie im Menü "Datei" die Option "An einen Prozess anfügen" auswählen oder F6 drücken.
Wenn das Dialogfeld "An Prozess anfügen" angezeigt wird, aktivieren Sie das Kontrollkästchen "Nichtvasiv" . Wählen Sie dann die Zeile aus, die die prozess-ID und den gewünschten Namen enthält. (Sie können auch die Prozess-ID in die Feld "Prozess-ID".) Wählen Sie schließlich "OK" aus.
Eingabeaufforderung
In einem Eingabeaufforderungsfenster können Sie beim Starten von WinDbg an einen ausgeführten Prozess anfügen, der nicht invasiv ausgeführt wird. Verwenden Sie einen der folgenden Befehle:
- windbg -pv -p ProcessID
- windbg -pv -pn ProcessName
Es gibt mehrere weitere nützliche Befehlszeilenoptionen. Weitere Informationen zur Befehlszeilensyntax finden Sie unter "WinDbg Command-Line Options".
Debugger-Befehlsfenster
Wenn der Debugger bereits aktiv ist, können Sie einen laufenden Prozess nicht invasiv debuggen, indem Sie den Befehl .attach -v (An Prozess anfügen) im Fenster "Debuggerbefehl" verwenden.
Sie können den Befehl ".attach" verwenden, wenn der Debugger bereits einen oder mehrere Prozesse invasiv debuggen soll. Sie können diesen Befehl nicht verwenden, wenn WinDbg ruhend ist.
Wenn der Befehl ".attach -v " erfolgreich ist, debugt der Debugger den angegebenen Prozess, wenn der Debugger das nächste Mal einen Ausführungsbefehl ausgibt. Da die Ausführung während des nicht invasiven Debuggens nicht zulässig ist, kann der Debugger nicht mehrere Prozesse gleichzeitig debuggen. Diese Einschränkung bedeutet auch, dass die Verwendung des Befehls ".attach -v " eine vorhandene invasive Debugsitzung weniger nützlich macht.
Spawning eines neuen Prozesses
WinDbg kann eine Benutzermodusanwendung starten und dann die Anwendung debuggen. Die Anwendung wird anhand des Namens angegeben. Der Debugger kann auch automatisch an untergeordnete Prozesse angefügt werden (zusätzliche Prozesse, die der ursprüngliche Zielprozess gestartet hat).
Prozesse, die der Debugger erstellt (auch als Spawned-Prozesse bezeichnet), verhalten sich geringfügig anders als Prozesse, die der Debugger nicht erstellt.
Anstatt die standardmäßige Heap-API zu verwenden, verwenden Prozesse, die der Debugger erstellt, einen speziellen Debug-Heap. Sie können einen Spawned-Prozess erzwingen, um den Standard-Heap anstelle des Debug-Heaps zu verwenden, indem Sie die _NO_DEBUG_HEAP Umgebungsvariable oder die Befehlszeilenoption -hd verwenden.
Da die Zielanwendung ein untergeordneter Prozess des Debuggers ist, erbt sie auch die Berechtigungen des Debuggers. Mit dieser Berechtigung kann die Zielanwendung bestimmte Aktionen ausführen, die andernfalls nicht ausgeführt werden konnten. Die Zielanwendung kann sich beispielsweise auf geschützte Prozesse auswirken.
WinDbg-Menü
Wenn Sich WinDbg im ruhenden Modus befindet, können Sie einen neuen Prozess durch Auswählen von "Ausführbare Datei öffnen" aus dem Menü "Datei " auswählen oder STRG+E drücken.
Wenn das Dialogfeld "Ausführbare Datei öffnen" angezeigt wird, geben Sie den vollständigen Pfad der ausführbaren Datei in das Feld "Dateiname " ein, oder verwenden Sie die Liste "Suchen in ", um den gewünschten Pfad und Dateinamen auszuwählen.
Wenn Sie Befehlszeilenparameter mit der Anwendung für den Benutzermodus verwenden möchten, geben Sie sie in das Feld "Argumente " ein. Wenn Sie das Startverzeichnis aus dem Standardverzeichnis ändern möchten, geben Sie den Verzeichnispfad in das Feld "Startverzeichnis " ein. Wenn WinDbg an untergeordnete Prozesse anfügen soll, aktivieren Sie auch das Kontrollkästchen untergeordnete Prozesse debuggen.
Nachdem Sie Ihre Auswahl getroffen haben, wählen Sie "Öffnen" aus.
Eingabeaufforderung
In einem Eingabeaufforderungsfenster können Sie einen neuen Prozess erstellen, wenn Sie WinDbg starten. Verwenden Sie den folgenden Befehl:
windbg [-o] ProgramName [Arguments]
Die Option "-o " bewirkt, dass der Debugger an untergeordnete Prozesse angefügt wird. Es gibt mehrere weitere nützliche Befehlszeilenoptionen. Weitere Informationen zur Befehlszeilensyntax finden Sie unter "WinDbg Command-Line Options".
Debugger-Befehlsfenster
Wenn WinDbg bereits einen oder mehrere Prozesse debuggt, können Sie einen neuen Prozess erstellen, indem Sie den Befehl .create (Create Process) im Debugger-Befehlsfenster verwenden.
Der Debugger startet immer mehrere Zielprozesse gleichzeitig, es sei denn, einige ihrer Threads werden fixiert oder angehalten.
Wenn der .create-Befehl erfolgreich ist, erstellt der Debugger den angegebenen Prozess, wenn der Debugger das nächste Mal einen Ausführungsbefehl ausgibt. Wenn Sie diesen Befehl mehrmals in einer Zeile verwenden, muss die Ausführung vom Debugger so oft angefordert werden, wie Sie diesen Befehl verwenden.
Sie können das Startverzeichnis der Anwendung steuern, indem Sie den Befehl .createdir (Set Created Process Directory) vor .create verwenden. Sie können den Befehl ".createdir-I " oder die Befehlszeilenoption "-noinh " verwenden, um zu steuern, ob die Zielanwendung die Handles des Debuggers erbt.
Sie können das Debuggen untergeordneter Prozesse aktivieren oder deaktivieren, indem Sie den Befehl ".childdbg" (Debug Child Processes) verwenden.
Erneutes Anattacken auf einen Prozess
Wenn der Debugger nicht mehr reagiert oder eingefroren ist, können Sie einen neuen Debugger an den Zielprozess anfügen. Weitere Informationen zum Anfügen eines Debuggers in dieser Situation finden Sie unter "Erneutes Anfügen an die Zielanwendung".