Anfügen an laufende Prozesse mit dem Visual Studio Debugger

In diesem Thema werden das Anfügen an einen laufenden Prozess, das Anfügen an einen Prozess auf einem Remotecomputer sowie das Beheben von Fehlern beim Anfügen beschrieben.

Warum wird für angefügte Prozesse ein Debugging durchgeführt?

Der Visual Studio-Debugger kann einem Prozess angefügt werden, der außerhalb von Visual Studio ausgeführt wird.Sie können sich diese Fähigkeit folgendermaßen zunutze machen:

  • Debuggen Sie ein Programm, das nicht in Visual Studio erstellt wurde.

  • Debuggen Sie mehrere Prozesse gleichzeitig.Sie können auch mehrere Programme debuggen, indem Sie innerhalb einer einzelnen Projektmappe mehrere Projekte starten.

  • Debuggen Sie einen Prozess, der auf einem Remotecomputer ausgeführt wird.

  • Debuggen Sie eine DLL, die in einem separaten Prozess ausgeführt wird, der nicht ohne Probleme über Visual Studio gestartet werden kann. Dies ist beispielsweise ein Dienst oder eine ISAPI-DLL, die mit Internetinformationsdiensten ausgeführt werden.

  • Starten Sie den Debugger automatisch, wenn ein Prozess abstürzt, wenn er außerhalb von Visual Studio ausgeführt wird.Hierbei handelt es sich um Just-In-Time-Debuggen.

Nachdem die Verbindung mit einem Programm hergestellt wurde, können Sie die Ausführungsbefehle des Debuggers verwenden, den Programmzustand überprüfen usw.Weitere Informationen finden Sie unter Debugging von mindestens einem Prozess in Visual Studio, Starten, Unterbrechen, schrittweise Ausführung, Ausführen von Code und Beenden des Debuggens in Visual Studio und Anzeigen von Daten im Debugger.Die Möglichkeiten zum Überprüfen des Programms sind ggf. eingeschränkt. Dies hängt davon ab, ob das Programm mit Debuginformationen erstellt wurde, ob Sie Zugriff auf den Quellcode des Programms haben und ob der JIT-Compiler der Common Language Runtime die Debuginformationen verfolgt.

C++-HinweisC++-Hinweis

Damit der Debugger an C++-Code angefügt werden kann, muss der Code DebuggableAttribute ausgeben.Sie können dieses Attribut automatisch in den Code einfügen, indem Sie eine Verknüpfung über die /ASSEMBLYDEBUG-Linkeroption herstellen.

WarnhinweisVorsicht

Zum Anfügen an eine in JavaScript geschriebene Windows Store-App müssen Sie zuerst das Debuggen für die App aktivieren.Weitere Informationen hierzu finden Sie im Windows Dev Center unter Attach the debugger.

Anfügen an einen laufenden Prozess

  1. Wählen Sie im Menü Debuggen die Option An den Prozess anhängen aus.

  2. Wählen Sie im Dialogfeld An den Prozess anhängen aus der Liste Verfügbare Prozesse das Programm, mit dem Sie eine Verbindung herstellen möchten.

    1. Wenn das Programm, das Sie debuggen möchten, auf einem anderen Computer ausgeführt wird, verwenden Sie das Listenfeld Qualifizierer, um den Remotecomputer auszuwählen oder anzugeben.Weitere Informationen finden Sie unter Remotedebugging und -diagnose.

    2. Wenn der Prozess unter einem anderen Benutzerkonto ausgeführt wird, aktivieren Sie das Kontrollkästchen Prozesse aller Benutzer anzeigen.

    3. Wenn Sie über eine Remotedesktopverbindung verbunden sind, aktivieren Sie das Kontrollkästchen Prozesse in allen Sitzungen anzeigen.

  3. Stellen Sie sicher, dass im Feld Anfügen an der Typ des Codes aufgelistet ist, den Sie debuggen möchten.Bei Verwendung der Standardeinstellung Automatisch wird versucht, den zu debuggenden Codetyp zu ermitteln.Wenn die automatische Einstellung nicht geeignet ist:

    1. Klicken Sie auf Auswählen.

    2. Klicken Sie im Dialogfeld Codetyp auswählen auf Diese Codetypen debuggen, und wählen Sie die zu debuggenden Codetypen aus.

    3. Klicken Sie auf OK.

  4. Klicken Sie auf Anfügen.

    Die Liste Verfügbare Prozesse wird beim Öffnen des Dialogfelds Prozesse automatisch angezeigt.Prozesse können bei geöffnetem Dialogfeld im Hintergrund gestartet und angehalten werden.Der Inhalt ist jedoch nicht immer aktuell.Sie können die Liste jederzeit aktualisieren, um die aktuelle Liste der Prozesse anzuzeigen. Klicken Sie dazu auf Aktualisieren.

    Sie können beim Debuggen mit mehreren Programmen verbunden sein, es ist jedoch jeweils nur ein Programm im Debugger aktiv.Sie können das aktive Programm auf der Symbolleiste Debugspeicherort oder im Fenster Prozesse festlegen.

    HinweisHinweis

    Damit der Debugger an verwaltetem Code angefügt werden kann, der in C++ geschrieben wurde, muss der Code DebuggableAttribute ausgeben.Sie können dieses Attribut automatisch in den Code einfügen, indem Sie eine Verknüpfung über die /ASSEMBLYDEBUG-Linkeroption herstellen.

    Wird versucht, eine Verbindung mit einem Prozess herzustellen, der zu einem nicht vertrauenswürdigen Benutzerkonto gehört, wird ein Bestätigungsdialogfeld mit einer Sicherheitswarnung angezeigt.Weitere Informationen finden Sie unter Sicherheitswarnung: Das Anfügen an einen Prozess, der einem nicht vertrauenswürdigen Benutzer gehört, kann gefährlich sein. Wenn die folgenden Informationen verdächtig wirken oder Sie sich hinsichtlich der Vorgehensweise nicht sicher sind, fügen Sie an den Prozess nichts an..

    In einigen Fällen werden beim Debuggen in einer Remotedesktopsitzung (Terminaldienste) in der Liste Verfügbare Prozesse nicht alle verfügbaren Prozesse angezeigt.Wenn Sie unter Windows Server 2003 oder höheren Versionen Visual Studio als Benutzer mit einem eingeschränkten Benutzerkonto ausführen, werden in der Liste Verfügbare Prozesse keine Prozesse angezeigt, die in der für Dienste und andere Serverprozesse einschließlich w3wp.exe verwendeten Sitzung 0 ausgeführt werden.Sie können dieses Problem beheben, indem Sie Visual Studio unter einem Administratorkonto oder an der Serverkonsole und nicht in einer Terminaldienstesitzung ausführen.Wenn keine dieser beiden Problemlösungen möglich ist, können Sie als dritte Möglichkeit den Prozess anfügen, indem Sie vsjitdebugger.exe -pProzessID in der Windows-Befehlszeile ausführen.Die Prozess-ID kann mit tlist.exe ermittelt werden.Um die Datei "tlist.exe" abzurufen, laden Sie die Debugtools für Windows von https://go.microsoft.com/fwlink/?LinkId=168279 herunter, und installieren Sie diese.

Wenn Sie das Debuggen des angefügten Prozesses beenden möchten, klicken Sie auf Debuggen / Debuggen beenden, oder beenden Sie den angefügten Prozess.

Anfügen an einen Prozess auf einem Remotecomputer

Wenn Sie das Dialogfeld An den Prozess anhängen verwenden, können Sie einen anderen Computer auswählen, der für das Remotedebuggen eingerichtet wurde.Weitere Informationen finden Sie unter Einrichten der Remotetools auf dem Gerät.Nach dem Auswählen eines Remotecomputers können Sie über eine Liste, in der alle verfügbaren laufenden Prozesse des Remotecomputers enthalten sind, den Debugger an einen oder mehrere Prozesse anhängen.

So wählen Sie einen Remotecomputer aus:

  1. Wählen Sie im Dialogfeld An den Prozess anhängen die entsprechende Verbindungsart aus der Liste Transport aus.Standard ist für die meisten Programme die richtige Einstellung.

  2. Verwenden Sie das Listenfeld Qualifizierer, um den Remotecomputernamen mithilfe einer der folgenden Methoden auszuwählen:

    1. Geben Sie im Listenfeld Qualifizierer den Namen ein.

    2. Klicken Sie auf den Dropdownpfeil neben dem Listenfeld Qualifizierer, und wählen Sie den Computernamen aus der Dropdownliste aus.

    3. Klicken Sie neben der Liste Qualifizierer auf die Schaltfläche Suchen, um das Dialogfeld Remotedebuggerverbindung auswählen zu öffnen.Im Dialogfeld Remotedebuggerverbindung auswählen werden alle Geräte aufgeführt, die sich auf dem lokalen Subnetz befinden, sowie sämtliche Geräte, die über ein Ethernetkabel direkt mit dem Computer verbunden sind.Klicken Sie auf den gewünschten Computer bzw. das gewünschte Gerät, und klicken Sie dann auf Auswählen.

    Die Einstellung Transport bleibt zwischen Debugsitzungen erhalten.Die Einstellung Qualifizierer bleibt nur zwischen Debugsitzungen erhalten, wenn eine erfolgreiche Debugverbindung mit diesem Qualifizierer auftritt.

Beheben von Fehlern beim Anfügen

Wenn der Debugger an einen laufenden Prozess angehängt wird, kann dieser Prozess mehrere Codetypen enthalten.Die Codetypen, an die der Debugger angefügt werden kann, werden im Dialogfeld Codetyp auswählen angezeigt und ausgewählt.

HinweisHinweis

Damit der Debugger an verwalteten, in C++ geschriebenen Code angefügt werden kann, muss der Code DebuggableAttribute ausgeben.Sie können dieses Attribut automatisch in den Code einfügen, indem Sie eine Verknüpfung über die /ASSEMBLYDEBUG-Linkeroption herstellen.

WarnhinweisVorsicht

Zum Anfügen an eine in JavaScript geschriebene Windows Store-App müssen Sie zuerst das Debuggen für die App aktivieren.Weitere Informationen hierzu finden Sie im Windows Dev Center unter Attach the debugger.

Manchmal kann der Debugger erfolgreich an den einen Codetyp, nicht aber an den anderen Codetyp angehängt werden.Das kann bei dem Versuch vorkommen, den Debugger an einen Prozess anzufügen, der auf einem Remotecomputer ausgeführt wird.Auf dem Remotecomputer sind möglicherweise nur Remotedebugkomponenten für bestimmte Codetypen installiert.Das Gleiche kann passieren, wenn Sie versuchen, den Debugger an mehr als einen Prozess zum direkten Datenbankdebuggen anzufügen.SQL-Debuggen unterstützt lediglich das Anfügen an einen einzelnen Prozess.

Wenn der Debugger nur an bestimmte, nicht aber an alle Codetypen angefügt werden kann, wird eine Meldung mit den Typen angezeigt, die nicht angefügt werden konnten.

Wenn der Debugger erfolgreich an mindestens einen Codetyp angehängt werden kann, können Sie mit dem Debuggen des Prozesses fortfahren.Sie können nur die erfolgreich angehängten Codetypen debuggen.Die vorherige Beispielmeldung weist darauf hin, dass der Skriptcodetyp nicht angefügt werden konnte.Deshalb wäre es nicht möglich, den Skriptcode innerhalb des Prozesses zu debuggen.Der Skriptcode im Prozess würde zwar weiterhin ausgeführt werden, doch Sie wären nicht in der Lage, Haltepunkte festzulegen, Daten anzuzeigen oder andere Debugoperationen im Skript durchzuführen.

Um weitere Informationen darüber zu erhalten, warum der Debugger nicht an einen Codetyp angefügt werden konnte, versuchen Sie erneut, den Debugger nur an diesen Codetyp anzufügen.

So erhalten Sie Informationen darüber, warum ein bestimmter Codetyp nicht angehängt werden konnte

  1. Trennen Sie den Prozess.Klicken Sie im Menü Debuggen auf Alle trennen.

  2. Fügen Sie den Prozess erneut an, und wählen Sie hierbei nur einen Codetyp aus.

    1. Wählen Sie im Dialogfeld An den Prozess anhängen in der Liste Verfügbare Prozesse den entsprechenden Prozess aus.

    2. Klicken Sie auf Auswählen.

    3. Klicken Sie im Dialogfeld Codetyp auswählen auf Diese Codetypen debuggen, und wählen Sie anschließend den Codetyp aus, der nicht angefügt werden konnte.Löschen Sie allen übrigen Code.

    4. Klicken Sie auf OK.Das Dialogfeld Codetyp auswählen wird geschlossen.

    5. Klicken Sie im Dialogfeld An den Prozess anhängen auf Anhängen.

    Dieses Mal schlägt das Anfügen komplett fehl, und Sie erhalten eine spezifische Fehlermeldung.

Siehe auch

Konzepte

Debugging von mindestens einem Prozess in Visual Studio

Just-In-Time-Debuggen in Visual Studio

Weitere Ressourcen

Remotedebugging und -diagnose