Partager via


Déboguer une extension Visual Studio

Lorsque vous déboguez une extension Visual Studio, une instance spéciale de Visual Studio appelée Instance expérimentale est utilisée pour héberger votre extension pendant que vous exécutez le débogueur dans l’IDE Visual Studio principal. Les deux instances s’exécutent indépendamment et parallèlement. Cet article explique comment déboguer des extensions créées avec le Kit de développement logiciel (SDK) VisualStudio.Extensibility lorsqu’elles s’exécutent dans l’instance expérimentale de l’IDE Visual Studio.

Processus d’extension

Le processus de débogage diffère légèrement selon que votre extension s’exécute en cours d’exécution ou hors processus. Consultez Créer votre première extension VisualStudio.Extensibility compatible VSSDK. Avec une extension hors processus, votre extension s’exécute dans un processus dédié pour les extensions Visual Studio. Ce processus, appelé Microsoft.ServiceHub.Host.Extensibility, répartit toutes les communications entre le processus IDE de Visual Studio et le processus qui héberge votre extension. Lorsque vous démarrez une extension à l’aide de F5, Visual Studio lance l’instance expérimentale Visual Studio et se connecte au processus qui héberge votre extension. Vous n’avez généralement pas besoin d’être préoccupé par le processus exact, car lorsque vous lancez le débogueur à partir d’un projet d’extension en appuyant F5 dans l’IDE Visual Studio, Visual Studio localise le processus approprié pour connecter le débogueur à.

Lorsque vous démarrez une session de débogage, votre assembly d’extension et ses symboles ne sont pas immédiatement chargés. Avant de charger votre extension, Visual Studio effectue le suivi des emplacements où l’extension peut être activée. Ces informations sont gérées dans une instance interne de VisualStudioContribution. Même avant le chargement de votre extension, Visual Studio dispose d’informations sur l’emplacement où elle peut être activée, par exemple lorsque l’utilisateur choisit un élément de menu particulier, appuie sur un bouton de barre d’outils ou charge un fichier d’un certain type dans l’éditeur. L’assembly de votre extension ne se charge pas tant qu’il n’est pas activé dans l’IDE. Par conséquent, lors du débogage, la première chose que vous devez faire est de prendre des mesures dans l’IDE Visual Studio pour déclencher le chargement de l’extension. Par exemple, vous devrez peut-être sélectionner l’élément de menu ou le bouton de barre d’outils de votre extension. À ce stade, votre assembly d’extension est chargé, le code d’initialisation est exécuté et vous pouvez atteindre des points d’arrêt et parcourir le code pas à pas. Le premier code à exécuter dans votre extension est la InitializeAsync méthode sur la Extension classe, et la méthode suivante est InitializeServices.

Processus et piles d’appels

Si votre extension est en cours d'exécution, la pile des appels inclut les frames de pile de Visual Studio ainsi que ceux de votre extension. Les symboles ne sont normalement pas disponibles pour Visual Studio, mais vous pouvez voir les appels où Visual Studio appelle votre extension.

Avec une extension hors processus, vous voyez uniquement la pile des appels de votre extension ; les trames de pile Visual Studio se trouvent dans un processus distinct. Visual Studio appelle votre extension à travers des interfaces qui supportent JsonRpc, l’hôte ServiceHub dirige l’appel, puis l’exécution dans votre processus commence dans la fonction de rappel. Le contrôle retourne à Visual Studio lorsque votre rappel est retourné.

L’état est passé à votre extension via différentes méthodes selon les besoins et est encapsulé par une instance IClientContext pour une utilisation facile. Cependant, il est important de noter qu’il s’agit d’un instantané de l’état, qui peut changer entre le moment où l’instantané est créé et celui où vous le lisez dans le code de l’extension ou le visualisez dans le débogueur.

Il existe un code interne dans le processus hôte ServiceHub qui gère la médiation RPC (appel de procédure distante). Si une défaillance se produit dans cette couche, elle n’est pas visible pour vous. Ces erreurs doivent être signalées comme des problèmes de produit.

Déboguer l’extension dans l’instance expérimentale de Visual Studio

  1. Ouvrez le projet d’extension.

  2. Configurez un point d’arrêt dans la méthode InitializeServices de votre extension, par exemple sur la classe principale dérivée de Extension. Pour définir un point d’arrêt sur une ligne de code, cliquez sur la ligne, puis appuyez F9sur .

  3. Dans le menu principal, choisissez Déboguer > Démarrer le débogage ou appuyez F5sur . Visual Studio Experimental Instance est lancée ; en même temps, le processus hôte ServiceHub démarre.

  4. Exécutez les étapes dans l'instance expérimentale de Visual Studio qui provoquent l'activation de votre extension ou reproduisent le scénario que vous prévoyez de déboguer.

  5. Visual Studio s’arrête à un point d’arrêt.

    Capture d’écran montrant Visual Studio déboguant une extension.

Conseil / Astuce

Il peut être pratique d’avoir plusieurs moniteurs. Vous pouvez donc voir à la fois le débogueur et l’instance expérimentale en même temps sur deux moniteurs différents. Vous pouvez modifier le thème de l’instance expérimentale pour rendre plus évident l’IDE avec lequel vous travaillez à un moment donné. Consultez Modifier les polices, les couleurs et les thèmes dans Visual Studio.

Déboguer l’extension à l’aide de l’Explorateur diagnostics

Pour plus d’informations, consultez VisualStudio.Extensibility Diagnostics Explorer .

Résolution des problèmes

Lorsque vous démarrez le débogueur, si vous voyez l’erreur que cette extension n’est pas prise en charge sur le produit actuel, ouvrez le .vsixmanifest fichier et vérifiez l’élément InstallationTarget . La cible Microsoft.VisualStudio.IntegratedShell d’installation n’est pas prise en charge ; utilisez Microsoft.VisualStudio.Community plutôt. Consultez la référence du schéma d’extension VSIX 2.0.