Déboguer les threads et processus dans Visual Studio
Article
Les threads et processus sont des concepts liés en informatique. Tous deux représentent des séquences d'instructions qui doivent s'exécuter dans un ordre spécifique. Les instructions dans des threads ou processus séparés, toutefois, peuvent s'exécuter en parallèle.
Les processus existent dans le système d'exploitation et correspondent à ce que les utilisateurs voient sous la forme de programmes ou d'applications. Un thread, en revanche, existe dans un processus. C'est pour cette raison que les threads sont parfois appelés processus légers. Chaque processus est constitué d'un ou de plusieurs threads.
L'existence de plusieurs processus permet à un ordinateur d'effectuer plusieurs tâches à la fois. L'existence de plusieurs threads permet à un processus de séparer le travail à exécuter en parallèle. Sur un ordinateur multiprocesseur, les processus ou les threads peuvent s'exécuter sur différents processeurs. Ce type d'exécution permet un véritable traitement en parallèle.
Le traitement en parallèle parfait n'est pas toujours possible. Les threads doivent parfois être synchronisés. Un thread peut attendre le résultat d'un autre thread ou un thread peut avoir besoin d'un accès exclusif à une ressource utilisée par un autre thread. Les problèmes de synchronisation sont une cause courante de bogues dans les applications multithread. Les threads attendent parfois une ressource qui n'est jamais disponible. Cet état est appelé interblocage.
Le débogueur Visual Studio propose des outils performants mais faciles à utiliser pour déboguer les threads et les processus.
Outils pour le débogage de threads et processus dans Visual Studio
Les principaux outils pour le débogage des processus dans Visual Studio sont la boîte de dialogue Attacher au processus, la fenêtre Processus et la barre d'outils Emplacement de débogage. Les principaux outils pour le débogage des threads sont la fenêtre Threads, les marqueurs de thread dans les fenêtres source et la barre d'outils Emplacement de débogage.
Les principaux outils de débogage d'applications multithread sont les fenêtres Piles parallèles et Tâches parallèles, Espion parallèle et Threads GPU.
Le tableau suivant affiche les informations disponibles et les actions que vous pouvez exécuter depuis chacun de ces emplacements :
Type (Managé v4.0 ; Managé v2.0, v1.1, v1.0 ; x86 ; x64 ; IA64)
Nom d'utilisateur (nom du compte)
Numéro de session
Sélectionnez un processus auquel attacher
Sélectionnez un ordinateur distant
Modifiez le type de transport pour la connexion aux ordinateurs distants
Fenêtre Processus.
Processus attachés :
Nom du processus
Numéro d'identification de processus
Chemin d'accès pour traiter .exe
Titre de barre de menus
État (Break. Running)
Débogage (natif, managé, etc.)
Type de transport (par défaut, natif sans authentification)
Qualificateur de transport (ordinateur distant)
Outils :
Attacher
Détacher
Terminer
Menu contextuel :
Attacher
Détacher
Détacher lorsque le débogage est arrêté
Terminer
Fenêtre Threads
Threads dans le processus actuel :
ID de thread
ID managé
Catégorie (thread principal, thread d'interface, gestionnaire d'appel de procédure distante ou thread de travail)
Nom du thread
Emplacement de création du thread
Priorité
Masque d'affinité
Compteur suspendu
Nom du processus
Indicateur
Indicateur suspendu
Outils :
Rechercher
Rechercher la pile des appels
Signaler uniquement mon code
Signaler la sélection de modules personnalisés
Regrouper par
Columns
Développer/réduire la pile des appels
Développer/réduire les groupes
Figer/libérer les threads
Menu contextuel :
Afficher les threads dans la source
Basculer vers un thread
Figer un thread actuel
Libérer un thread figé
Ajouter l'indicateur d'un thread dans le cadre d'une étude supplémentaire
Supprimer l'indicateur d'un thread
Renommer un thread
Afficher et masquer des threads
Autres actions :
Afficher la pile d'appel d'un thread dans un DataTip
Fenêtre source
Les indicateurs de thread de la reliure de gauche signalent un ou plusieurs threads (option désactivée par défaut, activée à l'aide du menu contextuel de la fenêtre Threads)
Menu contextuel :
Basculer vers un thread
Ajouter l'indicateur d'un thread dans le cadre d'une étude supplémentaire
Supprimer l'indicateur d'un thread
Barre d'outils Emplacement de débogage
Processus en cours
Afficher la miniature de l'application
Interrompre l'application
Redémarrer l'application
Interrompre et quitter l'application
Thread en cours
Activer/désactiver l'état actuel de l'indicateur de thread
Afficher seulement des threads avec indicateur
Afficher uniquement le processus actuel
Frame de pile en cours
Basculer vers un autre processus
Interrompre, reprendre ou quitter l'application
Basculer vers un autre thread dans le processus en cours
Basculer vers un autre frame de pile dans le thread en cours
Ajouter ou supprimer l'indicateur de threads actuels
Afficher seulement des threads avec indicateur
Afficher uniquement le processus actuel
Fenêtre Piles parallèles
Piles des appels pour plusieurs threads dans une fenêtre.
Frame de pile actif pour chaque thread.
Appelants et appelés pour toute méthode.
Éliminer les threads spécifiés par filtrage
Basculer vers la vue Tâches parallèles
Ajouter ou supprimer l'indicateur d'un thread
Zoom
Fenêtre Tâches parallèles
Affichez des informations sur les objets Task, notamment l'ID de la tâche, son état (planifié, en cours, en attente, bloqué), ainsi que le thread qui lui est assigné.
Emplacement actuel dans la pile des appels
Délégué transmis à la tâche au moment de la création
Basculer vers la tâche actuelle
Ajouter ou supprimer l'indicateur d'une tâche
Geler ou libérer une tâche
Fenêtre Espion parallèle
La colonne d'indicateur, où vous pouvez marquer un thread auquel vous souhaitez apporter une attention spéciale.
La colonne de frame, dans laquelle une flèche indique le frame sélectionné.
Une colonne configurable qui peut afficher l'ordinateur, le processus, la mosaïque, la tâche et le thread.
Ajouter ou supprimer l'indicateur d'un thread
Afficher uniquement les threads avec indicateur
Basculer les frames
Trier une colonne
Regrouper des threads
Figer ou libérer les threads
Exporter les données dans la fenêtre Espion parallèle
Fenêtre Threads GPU
La colonne d'indicateur, où vous pouvez marquer un thread auquel vous souhaitez apporter une attention spéciale.
Colonne de thread active, où une flèche jaune indique un thread actif. Flèche désignant un thread sur lequel l'exécution s'est arrêtée dans le débogueur.
Colonne Nombre de threads, qui affiche le nombre de threads au même emplacement.
Colonne Ligne, qui affiche la ligne de code où chaque groupe de threads est situé.
Colonne Adresse, qui affiche l'adresse d'instruction où chaque groupe de threads est localisé.
Colonne Emplacement, qui correspond à l'emplacement dans le code de l'adresse.
Colonne État, qui indique si le thread est actif ou bloqué.
Colonne Mosaïque, qui indique l'index de mosaïque des threads dans la ligne.