Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn Sie eine Visual Studio-Erweiterung debuggen, wird eine spezielle Instanz von Visual Studio, die als Experimentalinstanz bezeichnet wird, verwendet, um die Erweiterung zu hosten, während Sie den Debugger in der Haupt-Visual Studio-IDE ausführen. Die beiden Instanzen werden unabhängig voneinander ausgeführt. In diesem Artikel wird beschrieben, wie Sie Mit dem VisualStudio.Extensibility SDK erstellte Erweiterungen debuggen, wenn sie in der experimentellen Instanz der Visual Studio IDE ausgeführt werden.
Erweiterungsprozesse
Der Debuggingprozess unterscheidet sich geringfügig, je nachdem, ob die Erweiterung im Prozess oder außerhalb des Prozesses ausgeführt wird. Siehe Erstellen Ihrer ersten VSSDK-kompatiblen VisualStudio.Extensibility-Erweiterung. Mit einer out-of-process-Erweiterung wird Ihre Erweiterung in einem dedizierten Prozess für Visual Studio-Erweiterungen ausgeführt. Dieser Prozess, der sogenannte Microsoft.ServiceHub.Host.Extensibility, vermittelt die gesamte Kommunikation zwischen dem IDE-Prozess von Visual Studio und dem Prozess, der Ihre Erweiterung hostet. Wenn Sie eine Erweiterung mit F5 starten, startet Visual Studio die experimentelle Visual Studio-Instanz und stellt eine Verbindung mit dem Prozess bereit, der Die Erweiterung hosten soll. Normalerweise müssen Sie sich keine Gedanken über den genauen Prozess machen, da Visual Studio beim Starten des Debuggers aus einem Erweiterungsprojekt durch Drücken F5 in der Visual Studio-IDE den richtigen Prozess findet, mit dem der Debugger verbunden werden kann.
Wenn Sie eine Debugsitzung starten, werden die Erweiterungsassembly und die zugehörigen Symbole nicht sofort geladen. Bevor Die Erweiterung geladen wird, verfolgt Visual Studio die Orte, an denen die Erweiterung aktiviert werden kann. Diese Informationen werden in einer internen Instanz von VisualStudioContributionverwaltet. Vor dem Laden der Erweiterung enthält Visual Studio Informationen dazu, wo sie aktiviert werden kann, z. B. wenn der Benutzer ein bestimmtes Menüelement auswählt, eine Symbolleistenschaltfläche drückt oder eine Datei eines bestimmten Typs in den Editor lädt. Die Assembly Ihrer Erweiterung wird erst geladen, wenn sie in der IDE aktiviert ist. Beim Debuggen müssen Sie also zunächst aktionen in der Visual Studio-IDE ausführen, um die Zuladung der Erweiterung auszulösen. Sie müssen beispielsweise das Menüelement oder die Symbolleistenschaltfläche Ihrer Erweiterung auswählen. Zu diesem Zeitpunkt wird die Erweiterungsassembly geladen, der Initialisierungscode wird ausgeführt, und Sie können Haltepunkte setzen und Code schrittweise durchlaufen. Der erste Code, der in der Erweiterung ausgeführt werden soll, ist die InitializeAsync Methode für die Extension Klasse, und die nächste Methode ist InitializeServices.
Prozesse und Aufrufstapel
Wenn Ihre Erweiterung in Bearbeitung ist, enthält der Aufrufstapel Sowohl Visual Studio-Stapelframes als auch die Stapelframes Ihrer Erweiterung. Symbole sind normalerweise nicht für Visual Studio verfügbar, aber Sie können die Aufrufe sehen, in denen Visual Studio Ihre Erweiterung aufruft.
Bei einer out-of-process-Erweiterung sehen Sie nur die Aufrufliste Ihrer Erweiterung. Visual Studio-Stapelrahmen befinden sich in einem separaten Prozess. Visual Studio ruft ihre Erweiterung über jsonRpc-kompatible Schnittstellen auf, der ServiceHub-Host leitet den Aufruf weiter, und die Ausführung in Ihrem Prozess beginnt im Rückruf. Die Steuerung kehrt zu Visual Studio zurück, sobald Ihre Callback-Funktion zurückkehrt.
Der Zustand wird bei Bedarf in verschiedenen Methoden übergeben und von einer IClientContext Instanz für eine einfache Verwendung umschlossen. Es ist jedoch wichtig zu bedenken, dass es sich um eine Momentaufnahme des Zustands handelt, die sich zwischen dem Zeitpunkt der Aufnahme und dem Moment ändern kann, wenn Sie ihn aus dem Erweiterungscode lesen oder im Debugger betrachten.
Es gibt einen internen Code im ServiceHub-Hostprozess, der die RPC-Brokering (Remote Procedure Call) verarbeitet. Wenn in dieser Ebene ein Fehler auftritt, ist er für Sie nicht sichtbar. Solche Fehler sollten als Produktprobleme gemeldet werden.
Debuggen der Erweiterung in der experimentellen Instanz von Visual Studio
Öffnen Sie das Erweiterungsprojekt.
Richten Sie einen Haltepunkt ein, zum Beispiel in der
InitializeServices-Methode Ihrer Erweiterung auf der Hauptklasse, die vonExtensionabgeleitet ist. Wenn Sie einen Haltepunkt in einer Codezeile festlegen möchten, klicken Sie auf die Zeile, und drücken Sie .F9Wählen Sie im Hauptmenü "Debuggen starten" aus, oder drücken Sie
F5. Visual Studio Experimental Instance wird gestartet; gleichzeitig wird der ServiceHub-Hostprozess gestartet.Führen Sie die Schritte in der experimentellen Instanz von Visual Studio aus, die dazu führen, dass Die Erweiterung aktiviert wird oder das Szenario reproduziert wird, das Sie debuggen möchten.
Visual Studio stoppt an einem Unterbrechungspunkt.
Tipp
Es kann praktisch sein, mehrere Monitore zu haben, sodass Sie sowohl den Debugger als auch die experimentelle Instanz gleichzeitig auf zwei verschiedenen Monitoren sehen können. Möglicherweise möchten Sie das Design in der experimentellen Instanz ändern, um es deutlicher zu machen, mit welcher IDE Sie zu einem bestimmten Zeitpunkt arbeiten. Siehe Ändern von Schriftarten, Farben und Designs in Visual Studio.
Debuggen der Erweiterung mithilfe des Diagnose-Explorers
Weitere Informationen finden Sie im VisualStudio.Extensibility Diagnostics Explorer .
Problembehandlung
Wenn beim Starten des Debuggers der Fehler angezeigt wird, wird diese Erweiterung für das aktuelle Produkt nicht unterstützt, öffnen Sie die .vsixmanifest Datei, und überprüfen Sie das InstallationTarget Element. Das Installationsziel Microsoft.VisualStudio.IntegratedShell wird nicht unterstützt. Verwenden Sie Microsoft.VisualStudio.Community stattdessen. Siehe VSIX Extension Schema 2.0 Reference.