Debuggen eines User-Mode-Prozesses mit WinDbg Classic

Sie können WinDbg zum Anfügen an einen ausgeführten Prozess oder zum Erstellen und Anfügen an einen neuen Prozess verwenden.

Anfügen an einen ausgeführten Prozess

Es gibt mehrere Möglichkeiten, wie Sie WinDbg zum Anfügen an einen ausgeführten Prozess verwenden können. 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 die Option An einen Prozess anfügen auswählen oder F6 drücken.

Wählen Sie im Dialogfeld An Prozess anfügen den Prozess aus, den Sie debuggen möchten, und klicken Sie auf OK.

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 -pProcessID
  • windbg -pnProcessName

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-Optionen.

Debuggerbefehlsfenster

Wenn WinDbg bereits einen oder mehrere Prozesse debuggt, können Sie mit dem Befehl .attach (An den Prozess anhängen) im Debuggerbefehlsfenster an einen ausgeführten Prozess anfügen.

Der Debugger startet immer mehrere Zielprozesse gleichzeitig, es sei denn, einige ihrer Threads sind eingefroren oder angehalten.

Wenn der Befehl .attach erfolgreich ist, wird der Debugger an den angegebenen Prozess angefügt, wenn der Debugger das nächste Mal einen Ausführungsbefehl ausgibt. Wenn Sie diesen Befehl mehrmals hintereinander verwenden, muss die Ausführung vom Debugger so oft angefordert werden, wie Sie diesen Befehl verwenden.

Nichtinvasives Anfügen an einen ausgeführten Prozess

Wenn Sie einen ausgeführten Prozess debuggen und die Ausführung nur minimal beeinträchtigen möchten, sollten Sie den Prozess nicht invasiv debuggen.

WinDbg-Menü

Wenn Sich WinDbg im ruhenden Modus befindet, können Sie einen ausgeführten Prozess nicht invasiv debuggen, indem Sie im Menü Dateidie Option An einen Prozess anfügen auswählen oder F6 drücken.

Wenn das Dialogfeld An prozessanfügen angezeigt wird, aktivieren Sie das Kontrollkästchen Nichtinvasiv . Wählen Sie dann die Zeile aus, die die gewünschte Prozess-ID und den gewünschten Namen enthält. (Sie können die Prozess-ID auch in das Feld Prozess-ID eingeben.) Klicken Sie abschließend auf OK.

Eingabeaufforderung

In einem Eingabeaufforderungsfenster können Sie beim Starten von WinDbg nicht invasiv an einen ausgeführten Prozess anfügen. Verwenden Sie einen der folgenden Befehle:

  • windbg -pv -pProcessID
  • windbg -pv -pnProcessName

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

Debuggerbefehlsfenster

Wenn der Debugger bereits aktiv ist, können Sie einen ausgeführten Prozess nicht invasiv debuggen, indem Sie den Befehl .attach -v (An den Prozess anfügen) im Debuggerbefehlsfenster verwenden.

Sie können den Befehl .attach verwenden, wenn der Debugger bereits einen oder mehrere Prozesse invasiv debuggen. Sie können diesen Befehl nicht verwenden, wenn WinDbg inaktiv ist.

Wenn der Befehl .attach -v erfolgreich ist, debuggt der Debugger den angegebenen Prozess, wenn der Debugger das nächste Mal einen Ausführungsbefehl ausgibt. Da die Ausführung während des nichtinvasiven Debuggens nicht zulässig ist, kann der Debugger nicht mehr als einen Prozess gleichzeitig debuggen. Diese Einschränkung bedeutet auch, dass die Verwendung des Befehls .attach -v eine vorhandene invasive Debugsitzung möglicherweise weniger nützlich macht.

Erstellen eines neuen Prozesses

WinDbg kann eine Anwendung im Benutzermodus starten und dann die Anwendung debuggen. Die Anwendung wird durch den Namen angegeben. Der Debugger kann auch automatisch an untergeordnete Prozesse anfügen (zusätzliche Prozesse, die vom ursprünglichen Zielprozess gestartet wurden).

Prozesse, die vom Debugger erstellt werden (auch als erzeugte Prozesse bezeichnet), verhalten sich etwas anders als Prozesse, die der Debugger nicht erstellt.

Anstatt die Standardmäßige Heap-API zu verwenden, verwenden Prozesse, die der Debugger erstellt, einen speziellen Debugheap. Sie können erzwingen, dass ein erzeugter Prozess den Standardheap anstelle des Debugheaps verwendet, indem Sie die Umgebungsvariable _NO_DEBUG_HEAP oder die Befehlszeilenoption -hd verwenden.

Da die Zielanwendung ein untergeordneter Prozess des Debuggers ist, erbt sie auch die Berechtigungen des Debuggers. Diese Berechtigung kann es der Zielanwendung ermöglichen, bestimmte Aktionen auszuführen, die sie andernfalls nicht ausführen konnte. 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 erstellen, indem Sie im Menü Datei die Option Ausführbare Datei öffnen 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 Benutzermodusanwendung 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 angefügt werden 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-Optionen.

Debuggerbefehlsfenster

Wenn WinDbg bereits einen oder mehrere Prozesse debuggen, können Sie mithilfe des Befehls .create (Create Process) im Debuggerbefehlsfenster einen neuen Prozess erstellen.

Der Debugger startet immer mehrere Zielprozesse gleichzeitig, es sei denn, einige ihrer Threads sind eingefroren oder angehalten.

Wenn der Befehl .create erfolgreich ist, erstellt der Debugger den angegebenen Prozess, wenn der Debugger das nächste Mal einen Ausführungsbefehl ausgibt. Wenn Sie diesen Befehl mehrmals hintereinander 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 Anfügen an einen Prozess

Wenn der Debugger nicht mehr reagiert oder einfriert, 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.