Débogage multiprocessus

Il est très courant que les solutions modernes développées dans Visual Studio pour Mac contiennent des projets qui ciblent des plateformes différentes. Par exemple, une solution peut contenir un projet d’application mobile qui s’appuie sur des données fournies par un projet de service web. Pendant le développement de la solution, un développeur peut avoir besoin que les deux projets soient exécutés simultanément afin de résoudre des erreurs. Avec la version Cycle 9 de Xamarin, Visual Studio pour Mac peut désormais déboguer des processus qui sont exécutés en même temps. Il est donc possible de définir des points d’arrêt, d’inspecter des variables et d’afficher les threads de plusieurs projets en cours d’exécution. C’est ce que l’on appelle le débogage multiprocessus.

Ce guide aborde certaines des modifications qui ont été apportées à Visual Studio pour Mac en vue de prendre en charge le débogage de plusieurs processus à la fois. Il explique également comment configurer les solutions pour le débogage multiprocessus, et comment joindre le débogueur à des processus existants avec Visual Studio pour Mac.

Spécifications

Le débogage simultané de plusieurs processus nécessite l’utilisation de Visual Studio pour Mac.

Modifications de l’IDE

Pour aider les développeurs à déboguer plusieurs processus à la fois, Visual Studio pour Mac a apporté des modifications à son interface utilisateur. Visual Studio pour Mac dispose d’une barre d’outils Debug mise à jour et d’une nouvelle section Configuration des solutions dans le dossier Options de solution. En outre, le panneau Threads affiche désormais les processus en cours d’exécution et les threads de chaque processus. Visual Studio pour Mac affiche également plusieurs panneaux de débogage (un pour chaque processus) pour certains éléments tels que la sortie de l’application.

Configurations de solutions

Par défaut, Visual Studio pour Mac affiche un seul projet dans la zone Configuration de la solution de la barre d’outils de débogage. Au démarrage d’une session de débogage, c’est ce projet que Visual Studio pour Mac va lancer et joindre au débogueur.

Pour démarrer et déboguer plusieurs processus dans Visual Studio pour Mac, vous devez créer une configuration de solution. Une configuration de solution décrit les projets d’une solution qui doivent être inclus lorsqu’une session de débogage est lancée en un clic sur le bouton Démarrer ou lorsque l’utilisateur ↩ appuie sur ⌘ (Cmd-Entrée). Dans la capture d’écran suivante, un exemple de solution avec plusieurs configurations de solution est ouvert dans Visual Studio pour Mac :

Une solution avec plusieurs configurations de solution

Éléments de la barre d’outils de débogage

La barre d’outils de débogage permet désormais de sélectionner une configuration de solution via un menu contextuel. Cette capture d’écran montre les différents éléments qui composent la barre d’outils de débogage :

Parties de la barre d’outils de débogage

  1. Configuration de la solution : Vous pouvez cliquer sur la solution dans la barre d’outils de débogage et sélectionner la configuration dans le menu contextuel :

    Exemple de fenêtre contextuelle avec des configurations de solution

  2. Cible de génération : Identifie la cible de génération des projets. Cela reste inchangé par rapport aux versions antérieures de Visual Studio pour Mac.

  3. Appareils cibles : Permet de sélectionner les appareils sur lesquels la solution va être exécutée. Il est possible de sélectionner un appareil ou un émulateur pour chaque projet :

    Fenêtre contextuelle montrant les appareils d’un projet

Panneaux de débogage multiprocessus

Lorsque la configuration à plusieurs solutions est activée, certains panneaux Visual Studio pour Mac s’affichent plusieurs fois, c’est-à-dire, une fois pour chaque processus. La capture d’écran suivante montre deux panneaux Sortie de l’application pour une solution exécutant deux projets :

Panneau de sortie pour une configuration de solution

Options Multiprocessus et Thread actif

Lorsque vous rencontrez un point d’arrêt dans un processus, celui-ci suspend l’exécution, pendant que les autres processus continuent de s’exécuter. Dans un scénario à processus unique, Visual Studio pour Mac peut facilement afficher des informations, telles que les threads, les variables locales et la sortie de l’application, dans un même ensemble de panneaux. Toutefois, lorsqu’il existe plusieurs processus avec plusieurs points d’arrêt et potentiellement plusieurs threads, le développeur peut se retrouver submergé par les informations d’une même session de débogage, où les informations de tous les threads et de tous les processus s’affichent en même temps.

Pour résoudre ce problème, Visual Studio pour Mac n’affiche qu’un thread à la fois. C’est ce qu’on appelle le thread actif. Le premier thread qui s’arrête à un point d’arrêt est considéré comme le thread actif. Le thread actif est le thread dont s’occupe actuellement le développeur. Les commandes de débogage, telles que Pas à pas détaillé ⇧⌘O (Shift-Cmd-O), sont émises pour le thread actif.

Le panneau Thread affiche des informations sur tous les processus et tous les threads examinés dans la configuration de solution, et donne des indices visuels permettant de déterminer quel thread est actif :

Panneau de thread pour une configuration de solution

Les threads sont regroupés selon le processus qui les héberge. Le nom du projet et l’ID du thread actif sont affichés en gras, et une flèche pointant vers la droite s’affiche en regard du thread actif. Dans la capture d’écran précédente, le thread n°1 sous l’ID de processus 48703 (FirstProject) est le thread actif.

Lorsque vous déboguez plusieurs processus, vous pouvez basculer le thread actif pour afficher les informations de débogage de ce processus (ou thread) à l’aide du panneau Thread. Pour basculer le thread actif, sélectionnez le thread souhaité dans le panneau Thread, puis double-cliquez dessus.

Exécution pas à pas du code lorsque plusieurs projets sont arrêtés

Lorsque plusieurs projets ont des points d’arrêt, Visual Studio pour Mac suspend tous les processus. Vous pouvez uniquement exécuter du code pas à pas dans le thread actif. Les autres processus seront suspendus jusqu’à ce qu’une modification de l’étendue permette au débogueur de déplacer le focus du thread actif vers un autre thread. Regardez la capture d’écran suivante, où Visual Studio pour Mac débogue deux projets :

Visual Studio pour Mac débogage de deux projets

Dans cette capture d’écran, chaque solution a son propre point d’arrêt. Lorsque le débogage commence, le premier point d’arrêt rencontré se trouve sur la ligne 10 de MainClass dans SecondProject. Étant donné que les deux projets ont des points d’arrêt, chaque processus est arrêté. Une fois que le point d’arrêt est rencontré, Visual Studio pour Mac exécute du code pas à pas dans le thread actif après chaque appel de l’exécution pas à pas.

L’exécution pas à pas du code est limitée au thread actif. Par conséquent, Visual Studio pour Mac exécute le code ligne par ligne, pendant que les autres processus sont suspendus.

Si l’on reprend la capture d’écran précédente comme exemple, lorsque la boucle for est terminée, Visual Studio pour Mac permet à FirstProject de s’exécuter jusqu’à ce qu’il rencontre le point d’arrêt à ligne 11 dans MainClass. Pour chaque commande Pas à pas principal, le débogueur avance ligne par ligne dans FirstProject, jusqu’à ce que les algorithmes heuristiques internes de Visual Studio pour Mac rebasculent le thread actif vers SecondProject.

Si seul un des projets a un point d’arrêt défini, alors seul ce processus sera suspendu. Les autres projets continuent de s’exécuter jusqu’à ce qu’ils soient suspendus par le développeur ou qu’un point d’arrêt soit ajouté.

Suspension et reprise d’un processus

Pour suspendre et reprendre un processus, cliquez avec le bouton droit sur le processus, puis sélectionnez Suspendre ou Reprendre dans le menu contextuel :

Suspendre ou reprendre dans le panneau Thread

L’apparence de la barre d’outils de débogage change en fonction de l’état des projets en cours de débogage. Lorsque plusieurs projets sont en cours d’exécution, la barre d’outils de débogage affiche les deux boutons Suspendre et Reprendre, lorsqu’il y a au moins un projet en cours d’exécution et un projet suspendu :

Barre d’outils Debug

Quand vous cliquez sur le bouton Suspendre de la barre d’outils de débogage, vous suspendez tous les processus en cours de débogage. Quand vous cliquez sur le bouton Reprendre, vous relancez l’exécution de tous les processus suspendus.

Débogage d’un deuxième projet

Vous pouvez également déboguer un deuxième projet une fois que le premier projet a été démarré par Visual Studio pour Mac. Une fois le premier projet démarré, *cliquez avec le bouton droit sur le projet dans le Panneau Solutions, puis sélectionnez Démarrer le débogage de l’élément :

Démarrer le débogage de l’élément

Création d’une configuration de solution

Une configuration de solution indique à Visual Studio pour Mac quel projet doit être exécuté lorsqu’une session de débogage est démarrée à l’aide du bouton Démarrer. Une même solution peut avoir plusieurs configurations. Vous pouvez ainsi spécifier les projets qui doivent être exécutés lors du débogage du projet.

Pour créer une configuration de solution dans Xamarin Studio :

  1. Ouvrez la boîte de dialogue Options de solution dans Visual Studio pour Mac, puis sélectionnez Exécuter les > configurations :

    Configuration de la solution dans la boîte de dialogue Options de solution

  2. Cliquez sur le bouton Nouveau, entrez le nom de la nouvelle configuration de solution, puis cliquez sur Créer. La nouvelle configuration de solution s’affiche dans la fenêtre Configurations :

    Nommage d’une nouvelle configuration de solution

  3. Sélectionnez la nouvelle configuration de série de tests dans la liste de configurations. La boîte de dialogue Options de la solution affiche tous les projets de la solution. Cochez les projets qui doivent être démarrés lorsqu’une session de débogage est lancée :

    Sélection du projet à démarrer

La configuration de solution MultipleProjects s’affiche désormais dans la barre d’outils de débogage, ce qui permet au développeur de déboguer simultanément les deux projets.

Résumé

Ce guide a abordé le débogage de plusieurs processus dans Visual Studio pour Mac. Il a abordé certaines des modifications apportées à l’IDE pour prendre en charge le débogage multiprocessus et décrit certains des comportements associés.