Déboguer plusieurs processus (C#, Visual Basic, C++)

Visual Studio peut déboguer une solution qui possède plusieurs processus. Vous pouvez démarrer et basculer entre les processus, arrêter, continuer et parcourir la source, arrêter le débogage et terminer ou vous détacher de processus individuels.

Démarrer le débogage avec plusieurs processus

Lorsque plusieurs projets d’une solution Visual Studio peuvent s’exécuter indépendamment, vous pouvez sélectionner le projet que le débogueur démarre. Le projet de démarrage actuel apparaît en gras dans l’Explorateur de solutions.

Pour modifier le projet de démarrage, dans l’Explorateur de solutions, cliquez avec le bouton droit sur un autre projet et sélectionnez Définir comme projet de démarrage.

Pour commencer à déboguer un projet à partir de l’Explorateur de solutions sans en faire le projet de démarrage, cliquez avec le bouton droit sur le projet et sélectionnez Déboguer>Démarrer une nouvelle instance ou Pas à pas détaillé dans la nouvelle instance.

Pour définir le projet de démarrage ou plusieurs projets à partir des propriétés de la solution :

  1. Sélectionnez la solution dans l’Explorateur de solutions, puis sélectionnez l’icône Propriétés dans la barre d’outils, ou cliquez avec le bouton droit sur la solution et sélectionnez Propriétés.

  2. Dans la page Propriétés, sélectionnez Propriétés communes>Projet de démarrage.

    Changing the startup type for a project

  3. Sélectionnez Sélection actuelle, Projet de démarrage unique et un fichier projet, ou Plusieurs projets de démarrage.

    Si vous sélectionnez Plusieurs projets de démarrage, vous pouvez modifier l’ordre de démarrage et l’action à entreprendre pour chaque projet : Démarrer, Démarrer sans débogage ou Aucun.

  4. Sélectionnez Appliquer ou OK pour appliquer et fermer la boîte de dialogue.

Attacher à un processus

Le débogueur peut également attacher à des applications qui s’exécutent en dehors de Visual Studio, notamment sur des appareils distants. Après avoir attaché à une application, vous pouvez utiliser le débogueur Visual Studio. Les fonctionnalités de débogage peuvent être limitées. Cela dépend du fait que l’application ait ou non été générée avec des informations de débogage, du fait que vous ayez accès ou non au code source de l’application et du fait que le compilateur JIT suive ou non les informations de débogage.

Pour plus d’informations, consultez Attacher aux processus en cours d’exécution.

Pour attacher à un processus en cours d’exécution :

  1. Une fois l’application en cours d’exécution, sélectionnez Déboguer>Attacher au processus.

    Attach to Process dialog box

  2. Dans la boîte de dialogue Attacher au processus, sélectionnez le processus dans la liste Processus disponibles, puis sélectionnez Attacher.

Notes

Le débogueur n'effectue pas un attachement automatique à un processus enfant démarré par un processus débogué, même si le projet enfant se trouve dans la même solution. Pour déboguer un processus enfant, attachez au processus enfant après son démarrage, ou configurez l’Éditeur du Registre Windows pour démarrer le processus enfant dans une nouvelle instance de débogueur.

Utiliser l’Éditeur du Registre pour démarrer automatiquement un processus dans le débogueur

Parfois, il peut être utile de déboguer le code de démarrage d’une application lancée par un autre processus. C'est le cas des services et des actions d'installation personnalisée. Vous pouvez lancer le débogueur et l’attacher automatiquement à l’application.

  1. Démarrez l’Éditeur du Registre Windows en exécutant regedit.exe.

  2. Dans l’Éditeur du Registre, accédez à HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options.

  3. Sélectionnez le dossier de l’application à démarrer dans le débogueur.

    Si l’application n’est pas répertoriée en tant que dossier enfant, cliquez avec le bouton droit sur Options d’exécution du fichier image, sélectionnez Nouveau>Clé, puis tapez le nom de l’application. Ou cliquez avec le bouton droit sur la nouvelle clé dans l’arborescence, sélectionnez Renommer, puis entrez le nom de l’application.

  4. Cliquez avec le bouton droit sur la nouvelle clé dans l’arborescence et sélectionnez Nouveau>Valeur de chaîne.

  5. Modifiez le nom de la nouvelle valeur en remplaçant Nouvelle valeur n°1 par debugger.

  6. Cliquez avec le bouton droit sur debugger et sélectionnez Modifier.

    Edit String dialog box

  7. Dans la boîte de dialogue Modifier la chaîne, tapez vsjitdebugger.exe dans la zone Données de la valeur, puis sélectionnez OK.

    Automatic debugger start entry in regedit.exe

Déboguer avec plusieurs processus

Lors du débogage d’une application avec plusieurs processus, les commandes d’interruption, d’exécution pas à pas et de poursuite du débogueur affectent tous les processus par défaut. Par exemple, quand un processus est interrompu à un point d'arrêt, l'exécution de tous les autres processus est également interrompue. Vous pouvez changer ce comportement par défaut pour mieux contrôler les cibles des commandes d’exécution.

Pour modifier si tous les processus sont interrompus lorsqu’un processus s’arrête :

  • Sous Outils (ou Déboguer) >Options>Débogage>Général, cochez ou désactivez la case à cocher Arrêter tous les processus lorsqu’un processus s’arrête.

Commandes Arrêter, Exécuter pas à pas, Continuer

Le tableau suivant décrit les comportements des commandes de débogage lorsque la case à cocher Arrêter tous les processus lorsqu’un processus s’arrête est sélectionnée ou désactivée :

Commande Volumes sélectionnés Désélectionné
Déboguer>Interrompre tout Tous les processus s'arrêtent. Tous les processus s'arrêtent.
Déboguer>Continuer Tout les processus reprennent. Tous les processus suspendus reprennent.
Déboguer>Pas à pas détaillé, Pas à pas principal ou Pas à pas sortant Tous les processus s'exécutent pendant les étapes de processus actuelles.
Puis, tous les processus s'arrêtent.
Étapes de processus actuel.
Les processus suspendus reprennent.
Les processus en cours d'exécution se poursuivent.
Déboguer>Pas à pas détaillé dans le processus actuel, Pas à pas principal dans le processus actuel ou Pas à pas sortant dans le processus actuel N/A Étapes de processus actuel.
D'autres processus conservent leur état existant (Suspendu ou En cours d'exécution).
Point d’arrêt de la fenêtre source Tous les processus s'arrêtent. Seul le processus de fenêtre source est rompu.
Exécuter jusqu’au curseur de la fenêtre source
La fenêtre source doit figurer dans le processus actuel.
Tous les processus s'exécutent pendant que le processus de fenêtre source s'exécute jusqu'au curseur puis s'arrête.
Puis, tous les autres processus s'arrêtent.
Le processus de fenêtre source s'exécute sur le curseur.
D'autres processus conservent leur état existant (Suspendu ou En cours d'exécution).
Fenêtre Processus>Arrêter le processus N/A Le processus sélectionné s'interrompt.
D'autres processus conservent leur état existant (Suspendu ou En cours d'exécution).
Fenêtre Processus>Continuer le processus N/A Le processus sélectionné reprend.
D'autres processus conservent leur état existant (Suspendu ou En cours d'exécution).

Rechercher les fichiers sources et de symboles (.pdb)

Pour parcourir le code source d’un processus, le débogueur doit accéder à ses fichiers sources et fichiers de symboles. Pour plus d’informations, consultez Spécifier les fichiers de symboles (.pdb) et les fichiers sources.

Si vous ne pouvez pas accéder aux fichiers pour un processus, vous pouvez naviguer en utilisant la fenêtre Code Machine. Pour plus d’informations, consultez Comment : utiliser la fenêtre Code Machine.

Basculer entre processus

Pendant le débogage, vous pouvez attacher à plusieurs processus, mais un seul processus est actif dans le débogueur à un moment donné. Vous pouvez définir le processus actif ou actuel dans la barre d’outils Emplacement de débogage ou dans la fenêtre Processus. Pour basculer entre les processus, les deux processus doivent être en mode arrêt.

Pour définir le processus actuel à partir de la barre d’outils Emplacement de débogage :

  1. Pour ouvrir la barre d’outils Emplacement de débogage, sélectionnez Affichage>Barres d’outils>Emplacement de débogage.

  2. Pendant le débogage, dans la barre d’outils Emplacement de débogage, sélectionnez le processus que vous souhaitez définir comme processus actuel dans la liste déroulante Processus.

    Switch between processes

Pour définir le processus actuel à partir de la fenêtre Processus :

  1. Pour ouvrir la fenêtre Processus, lors du débogage, sélectionnez Déboguer>Fenêtres>Processus.

  2. Dans la fenêtre Processus, le processus en cours est marqué par une flèche jaune. Double-cliquez sur le processus que vous souhaitez définir comme processus actuel.

    Processes window

Le basculement vers un processus en fait le processus actuel à des fins de débogage. Les fenêtres du débogueur affichent l’état du processus actuel, et les commandes d’exécution pas à pas affectent uniquement le processus actuel.

Arrêter le débogage avec plusieurs processus

Par défaut, lorsque vous sélectionnez Déboguer>Arrêter le débogage, le débogueur se termine ou se détache de tous les processus.

  • Si le processus actuel a été lancé dans le débogueur, le processus est terminé.

  • Si vous avez attaché le débogueur au processus actuel, le débogueur se détache du processus et le conserve.

Si vous démarrez le débogage d’un processus à partir d’une solution Visual Studio, attachez-le à un autre processus déjà en cours d’exécution, puis choisissez Arrêter le débogage. La session de débogage prend fin. Le processus démarré dans Visual Studio prend fin, tandis que le processus auquel vous avez attaché continue de s’exécuter.

Pour contrôler la façon dont Arrêter le débogage affecte un processus individuel, dans la fenêtre Processus, cliquez avec le bouton droit sur un processus, puis cochez ou désactivez la case Détacher lorsque le débogage est arrêté.

Notes

L’option de débogueur Arrêter tous les processus lorsqu’un processus s’arrête n’affecte pas l’arrêt, la fin ni le détachement des processus.

Commandes Arrêter, Terminer et Détacher

Le tableau suivant décrit les comportements des commandes d’arrêt, de fin et de détachement du débogueur avec plusieurs processus :

Commande Description
Déboguer>Arrêter le débogage À moins que le comportement soit modifié dans la fenêtre Processus, les processus démarrés par le débogueur sont terminés et les processus attachés sont détachés.
Déboguer>Tout arrêter Tous les processus sont terminés.
Déboguer>Détacher tout Le débogueur se détache de tous les processus.
Fenêtre Processus>Détacher le processus Le débogueur se détache du processus sélectionné.
D'autres processus conservent leur état existant (Suspendu ou En cours d'exécution).
Fenêtre Processus>Terminer le processus Le processus sélectionné est terminé.
D'autres processus conservent leur état existant (Suspendu ou En cours d'exécution).
Fenêtre Processus>Détacher lorsque le débogage s’arrête Si cette option est sélectionnée, Déboguer>Arrêter le débogage détache du processus sélectionné.
Si cette option n’est pas sélectionnée, Déboguer>Arrêter le débogage met fin au processus sélectionné.