Afficher les threads dans le débogueur Visual Studio à l’aide de la fenêtre Threads (C#, Visual Basic, C++)

Dans la fenêtre Threads, vous pouvez visualiser et utiliser les threads de l’application que vous déboguez. Pour obtenir des instructions pas à pas sur l’utilisation de la fenêtre Threads, consultez Procédure pas à pas : Déboguer à l’aide de la fenêtre Threads.

Utiliser la fenêtre Threads

La fenêtre Threads contient un tableau où chaque ligne décrit un thread distinct de votre application. Par défaut, ce tableau répertorie tous les threads de votre application, mais vous pouvez filtrer la liste de façon à afficher uniquement les threads qui vous intéressent. Chaque colonne décrit un type d’informations différent. Vous pouvez également masquer certaines colonnes. Si vous affichez toutes les colonnes, les colonnes suivantes s’affichent, de gauche à droite :

  • Indicateur : dans cette colonne non libellée, vous pouvez marquer un thread auquel vous souhaitez apporter une attention spéciale. Pour plus d’informations sur l’indicateur d’un thread, consultez Guide pratique pour ajouter et supprimer des threads.

  • Thread actuel : dans cette colonne non étiquetée, une flèche jaune indique le thread actif. Un contour de flèche indique le contexte actuel du débogueur pour un thread non actif.

  • ID : affiche le numéro d’identification de chaque thread.

  • ID géré: affiche les numéros d’identification managés des threads managés.

  • Catégorie: affiche la catégorie de threads comme threads d’interface utilisateur, gestionnaires d’appel de procédure distante ou threads de travail. Une catégorie spéciale identifie le thread principal de l'application.

  • Nom : identifie chaque thread par son nom, s’il en a un, ou par <Sans nom>.

  • Emplacement : indique l’emplacement d’exécution du thread. Vous pouvez développer cet emplacement de façon à afficher l’ensemble de la pile des appels du thread.

  • Priorité: une colonne avancée (masquée par défaut) affiche la priorité ou précédence que le système a assignée à chaque thread.

  • Masque d’affinité: une colonne avancée (masquée par défaut) indique le masque d’affinité de processeur pour chaque thread. Dans un système multiprocesseurs, le masque d'affinité détermine les processeurs sur lesquels un thread peut s'exécuter.

  • Compteur suspendu: une colonne avancée (masquée par défaut) qui affiche le compteur suspendu. Ce compteur détermine si un thread peut s'exécuter. Pour plus d’informations sur les comptes suspendus, consultez Geler et dégeler des threads.

  • Nom du processus: une colonne avancée (masquée par défaut) affiche le processus auquel chaque thread appartient. Les données de cette colonne peuvent être utiles lorsque vous déboguez de nombreux processus.

  • ID de processus: ID d’une colonne avancée (masquée par défaut) affiche le processus auquel chaque thread appartient.

  • Qualificateur de transport: une colonne avancée (masquée par défaut) qui identifie de façon unique l’ordinateur auquel le débogueur est connecté.

Pour afficher la fenêtre Threads en mode arrêt ou en mode exécution

  • Lorsque Visual Studio est en mode débogage, sélectionnez le menu Déboguer, pointez sur Windows, puis sélectionnez Threads.

Pour afficher ou masquer une colonne

  • Dans la barre d’outils située en haut de la fenêtre Threads, sélectionnez Colonnes. Ensuite, sélectionnez ou désactivez le nom de la colonne que vous souhaitez afficher ou masquer.

Afficher les threads avec indicateur

Vous pouvez signaler un thread auquel vous souhaitez accorder une attention particulière en le marquant avec une icône dans la fenêtre Threads. Pour plus d’informations, consultez Guide pratique : ajouter et supprimer les indicateurs des threads. Dans la fenêtre Threads, vous pouvez choisir d’afficher tous les threads ou uniquement les threads avec indicateur.

Pour afficher seulement les threads avec indicateur

  • Choisissez Afficher les threads avec indicateur uniquement dans la barre d’outils en haut de la fenêtre Threads. (S’il est grisé, vous devez d’abord marquer certains threads.)

Figer et libérer les threads

Lorsque vous gelez un thread, le système ne démarre pas son exécution même si les ressources sont disponibles.

En code natif, vous pouvez interrompre ou reprendre des threads en appelant les fonctions Windows SuspendThread et ResumeThread. Vous pouvez également appeler les fonctions MFC CWinThread::SuspendThread et CWinThread::ResumeThread. Si vous appelez SuspendThread ou ResumeThread, le Compte suspendu affiché dans la fenêtre Threads sera modifié. Le compte suspendu ne change pas si vous gelez ou dégelez un thread natif. Un thread ne peut pas s’exécuter dans du code natif, sauf s’il est dégelé et qu’il a un compte suspendu de zéro.

Dans le code managé, le compte suspendu change lorsque vous gelez ou dégelez un thread. Si vous gelez un thread dans du code managé, son compte suspendu est 1. Lorsque vous gelez un thread dans du code natif, son compte suspendu est 0, sauf si vous avez utilisé l’appel SuspendThread.

Notes

Lors du débogage d'un appel entre code natif et code managé, le code managé s'exécute dans le même thread physique que le code natif qui l'a appelé. Si vous suspendez ou figez le thread natif, le code managé sera également figé.

Pour geler ou libérer l'exécution d'un thread

  • Dans la barre d’outils en haut de la fenêtre Threads, sélectionnez Figer les threads ou Libérer les threads.

    Cette action affecte uniquement les threads sélectionnés dans la fenêtre Threads.

Basculer vers un autre thread

Une flèche jaune indique le thread actuel (et l’emplacement du pointeur d’exécution). Le marqueur de thread actuel d’origine reste également, sous forme de plan.

Une flèche jaune indique le thread actuel (et l’emplacement du pointeur d’exécution). Une flèche verte avec une queue bouclée indique qu’un thread non actif a le contexte actuel du débogueur.

Pour basculer vers un autre thread

  • Effectuez l’une des étapes suivantes :

    • Double-cliquez sur un thread.

    • Cliquez avec le bouton droit sur un thread, puis sélectionnez Basculer vers le thread.

Regrouper et trier des threads

Lorsque vous regroupez des threads, un titre s'affiche dans le tableau pour chaque groupe. Ce titre contient une description du groupe, telle que Thread de travail ou Threads sans indicateur, ainsi qu’un contrôle d’arborescence. Les threads membres de chaque groupe apparaissent sous le titre approprié. Si vous souhaitez masquer les threads membres d’un groupe, utilisez le contrôle d’arborescence pour réduire ce groupe.

Étant donné que le regroupement est prioritaire sur le tri, vous pouvez grouper des threads par catégorie, par exemple, puis les trier par ID dans chaque catégorie.

Pour trier des threads

  1. Dans la barre d’outils en haut de la fenêtre Threads, sélectionnez le bouton situé au-dessus de l’une des colonnes.

    Les threads sont alors triés en fonction des valeurs de la colonne choisie.

  2. Si vous souhaitez inverser l’ordre de tri, sélectionnez de nouveau le bouton.

    Les threads qui figuraient au début de la liste s'affichent maintenant à la fin.

Pour regrouper des threads

  • Dans la barre d’outils de la fenêtre Threads, sélectionnez la liste Grouper par, puis le critère souhaité pour le regroupement des threads.

Pour trier des threads au sein de groupes

  1. Dans la barre d’outils en haut de la fenêtre Threads, sélectionnez la liste Grouper par, puis le critère souhaité pour le regroupement des threads.

  2. Dans la fenêtre Threads, sélectionnez le bouton situé au-dessus des colonnes.

    Les threads sont alors triés en fonction des valeurs de la colonne choisie.

Pour développer ou réduire tous les groupes

  • Dans la barre d’outils en haut de la fenêtre Threads, sélectionnez Développer les groupes ou Réduire les groupes.

Rechercher des threads spécifiques

Vous pouvez rechercher des threads qui correspondent à une chaîne spécifiée dans la fenêtre Threads. Lorsque vous recherchez des threads, la fenêtre affiche tous les threads qui correspondent à la chaîne recherchée dans toute colonne. Ces informations incluent l’emplacement de thread qui s’affiche en haut de la pile des appels dans la colonne Emplacement. Par défaut, la pile d’appels complète n’est pas recherchée.

Pour rechercher des threads spécifiques

  1. Dans la barre d’outils en haut de la fenêtre Threads, accédez à la zone Rechercher et effectuez l’une des opérations suivantes :

    • Entrez une chaîne recherchée et appuyez sur Entrée.

    - ou -

    • Sélectionnez la liste déroulante en regard de la zone Rechercher et sélectionnez une chaîne d’une recherche précédente.
  2. (Facultatif) Pour inclure l’ensemble de la pile des appels dans la recherche, sélectionnez Rechercher la pile des appels.

Afficher les piles d’appels de threads et basculer entre les frames

Dans un programme multithread, chaque thread possède sa propre pile d'appel. La fenêtre Threads permet d’afficher facilement ces piles.

Conseil

Pour obtenir une représentation visuelle de la pile d’appels pour chaque thread, utilisez la fenêtre Piles parallèles.

Pour afficher la pile d'appel d'un thread

  • Dans la colonne Emplacement, sélectionnez le triangle inversé en regard de l’emplacement de thread.

    L'emplacement se développe pour indiquer la pile des appels du thread.

Pour afficher ou réduire les piles d‘appels de tous les threads

  • Dans la barre d’outils en haut de la fenêtre Threads, sélectionnez Développer la pile des appels ou Réduire la pile des appels.