Freigeben über


Nicht invasives Debuggen (Benutzermodus)

Wenn eine Benutzermodusanwendung bereits ausgeführt wird, kann der Debugger sie nicht invasiv debuggen. Bei nichtinvasiven Debugging haben Sie nicht so viele Debugaktionen. Sie können jedoch die Interferenzen des Debuggers mit der Zielanwendung minimieren. Nicht invasives Debuggen ist nützlich, wenn die Zielanwendung nicht mehr reagiert.

Im nichtvasiven Debuggen wird der Debugger nicht tatsächlich an die Zielanwendung angefügt. Der Debugger hält alle Threads des Ziels an und hat Zugriff auf den Speicher des Ziels, registriert und andere solche Informationen. Der Debugger kann das Ziel jedoch nicht steuern, sodass Befehle wie g (Go) nicht funktionieren.

Wenn Sie versuchen, Befehle auszuführen, die während des nichtvasiven Debuggings nicht zulässig sind, erhalten Sie eine Fehlermeldung, die besagt: "Der Debugger ist nicht angefügt, sodass die Prozessausführung nicht überwacht werden kann."

Auswählen des zu debuggenden Prozesses

Sie können die Zielanwendung durch die Prozess-ID (PID) oder den Prozessnamen angeben.

Wenn Sie die Anwendung anhand des Namens angeben, sollten Sie den vollständigen Namen des Prozesses verwenden, einschließlich der Dateinamenerweiterung. Wenn zwei Prozesse denselben Namen haben, müssen Sie stattdessen die Prozess-ID verwenden.

Weitere Informationen zum Ermitteln der Prozess-ID und des Prozessnamens finden Sie unter Suchen der Prozess-ID.

Informationen zum Starten und Beenden einer nicht invasiven Debugsitzung finden Sie in den folgenden Themen:

CDB-Befehlszeile

Wenn Sie einen laufenden Prozess nicht über die Befehlszeile des CDB debuggen möchten, geben Sie in der folgenden Syntax die Option -pv, die Option -p und die Prozess-ID an.

cdb -pv -p ProcessID

Oder verwenden Sie zum nichtinvasiven Debuggen eines ausgeführten Prozesses durch Angeben des Prozessnamens stattdessen die folgende Syntax.

cdb -pv -pn ProcessName

Es gibt mehrere weitere nützliche Befehlszeilenoptionen. Weitere Informationen zur Befehlszeilensyntax finden Sie unter CDB-Befehlszeilenoptionen.

WinDbg-Befehlszeile

Wenn Sie einen ausgeführten Prozess nicht über die WinDbg-Befehlszeile debuggen möchten, geben Sie die Option -pv, die Option -p und die Prozess-ID in der folgenden Syntax an.

windbg -pv -p ProcessID

Oder verwenden Sie zum nichtinvasiven Debuggen eines ausgeführten Prozesses durch Angeben des Prozessnamens stattdessen die folgende Syntax.

windbg -pv -pn ProcessName

Es gibt mehrere weitere nützliche Befehlszeilenoptionen. Weitere Informationen zur Befehlszeilensyntax finden Sie unter "WinDbg Command-Line Options".

WinDbg-Menü

Wenn Sich WinDbg im Ruhezustand befindet, können Sie einen laufenden Prozess nicht invasiv debuggen, indem Sie im Menü "Datei" auf "An einen Prozess anfügen" klicken 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 im Feld "Prozess-ID" eingeben.) Klicken Sie abschließend auf "OK".

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 in CDB verwenden, wenn er ruhend ist, aber nicht in einem ruhenden WinDbg.

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.

Starten der Debugsitzung

Weitere Informationen zum Starten einer Debugsitzung finden Sie unter Debugger-Vorgang.