Afficher les threads et les tâches dans la fenêtre Piles parallèles (C#, Visual Basic, C++)

La fenêtre Piles parallèles est utile pour le débogage d’applications multithread. Elle contient plusieurs vues :

Utiliser la fenêtre Piles parallèles

Pour ouvrir la fenêtre Piles parallèles, vous devez être dans une session de débogage. Sélectionnez Débogage>Fenêtres>Piles parallèles.

Contrôles de barre d’outils

La fenêtre Piles parallèles comporte les contrôles de barre d’outils suivants :

Screenshot of Toolbar in Parallel Stacks window.

Icône Control Description
Threads/Tasks combo box Zone de liste déroulante Threads/Tâches Bascule entre la vue des piles d’appels de threads et la vue des piles d’appels de tâches. Pour plus d’informations, consultez Vue Tâches et Vue Threads.
Show Only Flagged icon Afficher uniquement avec indicateur Affiche les piles d’appels uniquement pour les threads qui sont marqués dans d’autres fenêtres de débogueur, comme la fenêtre Threads GPU et la fenêtre Espion parallèle.
Toggle Method View icon Basculer dans la vue Méthode Bascule entre les vues de pile des appels et la Vue Méthode. Pour plus d’informations, consultez Vue Méthode.
Auto Scroll to Current icon Défilement automatique vers le frame de pile actif Fait défiler automatiquement le graphique afin que le frame de pile actuel soit visible. Cette fonctionnalité est utile lorsque vous modifiez le frame de pile actuel d’autres fenêtres ou lorsque vous atteignez un nouveau point d’arrêt dans de grands graphiques.
Toggle Zoom icon Basculer le contrôle de zoom Affiche ou masque le contrôle de zoom à gauche de la fenêtre.

Quelle que soit la visibilité du contrôle de zoom, vous pouvez également effectuer un zoom en appuyant sur Ctrl et en tournant la molette de la souris, ou en appuyant sur Ctrl+Maj++ pour effectuer un zoom avant et Ctrl+Maj+- pour un zoom arrière.

Screenshot of Toolbar in Parallel Stacks window 2022.

Icône Control Description
Threads/Tasks combo box Zone de liste déroulante Threads/Tâches Bascule entre la vue des piles d’appels de threads et la vue des piles d’appels de tâches. Pour plus d’informations, consultez Vue Tâches et Vue Threads.
Filter icon Contrôle des filtres Affiche les piles d'appels uniquement pour l'ensemble spécifique de threads qui vous intéresse.
Show Only Flagged icon Afficher uniquement avec indicateur Affiche les piles d’appels uniquement pour les threads qui sont marqués dans d’autres fenêtres de débogueur, comme la fenêtre Threads GPU et la fenêtre Espion parallèle.
Toggle Method View icon Basculer dans la vue Méthode Bascule entre les vues de pile des appels et la Vue Méthode. Pour plus d’informations, consultez Vue Méthode.
Auto Scroll to Current icon Défilement automatique vers le frame de pile actif Fait défiler automatiquement le graphique afin que le frame de pile actuel soit visible. Cette fonctionnalité est utile lorsque vous modifiez le frame de pile actuel d’autres fenêtres ou lorsque vous atteignez un nouveau point d’arrêt dans de grands graphiques.
Toggle Zoom icon Basculer le contrôle de zoom Affiche ou masque le contrôle de zoom à gauche de la fenêtre.

Quelle que soit la visibilité du contrôle de zoom, vous pouvez également effectuer un zoom en appuyant sur Ctrl et en tournant la molette de la souris, ou en appuyant sur Ctrl+Maj++ pour effectuer un zoom avant et Ctrl+Maj+- pour un zoom arrière.
Search icon Contrôle Rechercher Avec cette fonctionnalité, vous pouvez effectuer facilement une recherche dans des frames de pile, puis utiliser les flèches pour naviguer entre ces résultats.
Save icon Contrôle Enregistrer Vous permet d’enregistrer/exporter le contenu de la fenêtre Pile parallèle en tant qu’image.
External Code icon Contrôle Montrer le code externe En utilisant cette fonctionnalité, vous pouvez afficher/masquer les piles dans le code/les bibliothèques externes.

Icônes Frame de pile

Les icônes suivantes fournissent des informations sur les frames de pile actifs et actuels dans toutes les vues :

Icône Description
Yellow arrow Indique l’emplacement actuel (frame de pile actif) du thread actuel.
Threads icon Indique l’emplacement actuel (frame de pile actif) d’un thread non actif.
Green arrow Indique le frame de pile actuel (le contexte du débogueur actuel). Le nom de la méthode est en gras partout où il apparaît.
Icône Description
Yellow arrow Indique l’emplacement actuel (frame de pile actif) du thread actuel.
Threads icon Indique l’emplacement actuel (frame de pile actif) d’un thread non actif.
Green arrow Indique le frame de pile actuel (le contexte du débogueur actuel). Le nom de la méthode est en gras partout où il apparaît.
Status Error Indique que le frame de pile actuel a un avertissement d’état Critique, comme Interblocage.
Status Excluded Indique le nœud avec interblocage.
Status Information Indique que le frame de pile actuel contient des informations supplémentaires comme En attente, Attente sur le verrou, Propriété de, etc.
Status Blocked Indique que la tâche actuelle est dans un état Bloqué/En attente, etc.
Status Running Indique que la tâche est actuellement en cours d’exécution.

Éléments de menu contextuel

Les éléments de menu contextuel suivants sont disponibles lorsque vous cliquez avec le bouton droit sur une méthode dans la vue Threads ou Tâches. Les six derniers éléments sont les mêmes que dans la fenêtre Pile des appels.

Screenshot of Shortcut menu in Parallel Stacks window.

Élément de menu Description
Indicateur Marque l'élément sélectionné.
Supprimer l’indicateur Supprimer l'indicateur de l'élément sélectionné.
Freeze Fige l'élément sélectionné.
Libérer Libère l'élément sélectionné.
Basculer vers le frame Identique à la commande de menu correspondante de la fenêtre Pile des appels. Toutefois, dans la fenêtre Piles parallèles, une méthode peut se trouver dans plusieurs frames. Vous pouvez sélectionner le frame souhaité dans le sous-menu pour cet élément. Si l’un des frames de pile se trouve sur le thread actuel, ce frame est sélectionné par défaut dans le sous-menu.
Accéder à la tâche ou Accéder au thread Bascule vers la vue Tâche ou Threads et conserve le même frame de pile mis en surbrillance.
Atteindre le code source Accède à l’emplacement correspondant dans la fenêtre du code source.
Atteindre le code machine Accède à l’emplacement correspondant dans la fenêtre Désassemblage.
Afficher le code externe Affiche ou masque le code externe.
Affichage hexadécimal Bascule entre affichage décimal et hexadécimal.
Afficher les threads dans la source Signale l’emplacement du thread dans la fenêtre du code source.
Informations sur le chargement de symboles Ouvre la boîte de dialogue Informations sur le chargement des symboles.
Paramètres des symboles Ouvre la boîte de dialogue Paramètres des symboles.

Screenshot of Shortcut menu in Parallel Stacks window 2022.

Élément de menu Description
Copy Copiez l’élément sélectionné.
Sélectionner tous les frames ci-dessous Sélectionne tous les frames sous la pile sélectionnée.
Indicateur Marque l'élément sélectionné.
Supprimer l’indicateur Supprimer l'indicateur de l'élément sélectionné.
Freeze Fige l'élément sélectionné.
Libérer Libère l'élément sélectionné.
Basculer vers le frame Identique à la commande de menu correspondante de la fenêtre Pile des appels. Toutefois, dans la fenêtre Piles parallèles, une méthode peut se trouver dans plusieurs frames. Vous pouvez sélectionner le frame souhaité dans le sous-menu pour cet élément. Si l’un des frames de pile se trouve sur le thread actuel, ce frame est sélectionné par défaut dans le sous-menu.
Accéder à la tâche ou Accéder au thread Bascule vers la vue Tâche ou Threads et conserve le même frame de pile mis en surbrillance.
Atteindre le code source Accède à l’emplacement correspondant dans la fenêtre du code source.
Atteindre le code machine Accède à l’emplacement correspondant dans la fenêtre Désassemblage.
Afficher le code externe Affiche ou masque le code externe.
Affichage hexadécimal Bascule entre affichage décimal et hexadécimal.
Afficher les threads dans la source Signale l’emplacement du thread dans la fenêtre du code source.
Informations sur le chargement de symboles Ouvre la boîte de dialogue Informations sur le chargement des symboles.
Paramètres des symboles Ouvre la boîte de dialogue Paramètres des symboles.

vue Threads

Dans la vue Threads, le frame de pile et le chemin d’appel du thread actuel sont mis en surbrillance en bleu. L’emplacement actuel du thread est indiqué par la flèche jaune.

Pour modifier le frame de pile actuel, double-cliquez sur une autre méthode. Ceci peut également entraîner le basculement du thread actuel, selon que la méthode sélectionnée fait partie du thread actuel ou d’un autre thread.

Lorsque le graphique de vue Threads est trop grand pour tenir dans la fenêtre, un contrôle Vue aérienne s’affiche dans la fenêtre. Vous pouvez déplacer le frame dans le contrôle pour accéder à différentes parties du graphique.

L’illustration suivante montre un thread qui passe de Main à une transition du code managé vers le code natif. Six threads se trouvent dans la méthode actuelle. L’un continue vers Thread.Sleep et l’autre sur Console.WriteLine, puis sur SyncTextWriter.WriteLine.

Screenshot of Threads view in Parallel Stacks window.

Le tableau suivant décrit les principales fonctionnalités de la vue Threads :

Légende Nom de l'élément Description
1 Nœud ou segment de pile des appels Contient une série de méthodes pour un ou plusieurs threads. Si le frame n’est pas relié à des flèches, il représente le chemin d’appel entier du ou des threads.
2 Surbrillance bleue Indique le chemin d’appel du thread actuel.
3 Flèches Relient des nœuds pour créer le chemin d'appel entier du ou des threads.
4 En-tête de nœud Affiche le nombre de processus et de threads pour le nœud.
5 Méthode Représente un ou plusieurs frames de pile dans la même méthode.
6 Info-bulle sur méthode Apparaît lorsque vous pointez sur une méthode. Dans la vue Threads, l’info-bulle montre tous les threads dans un tableau semblable à la fenêtre Threads.

L’illustration suivante montre un thread qui passe de Main à une transition du code managé vers le code natif. Cinq threads se trouvent dans la méthode actuelle. L’un d’eux continue vers ServerClass.InstanceMethod, et l’autre vers Worker.Thread.Start, puis vers StartupHook.Initialize.AnonymousMethod.

Screenshot of Threads view in Parallel Stacks window 2022.

Le tableau suivant décrit les principales fonctionnalités de la vue Threads :

Légende Nom de l'élément Description
1 Nœud ou segment de pile des appels Contient une série de méthodes pour un ou plusieurs threads. Si le frame n’est pas relié à des flèches, il représente le chemin d’appel entier du ou des threads.
2 Surbrillance bleue Indique le chemin d’appel du thread actuel.
3 Flèches Relient des nœuds pour créer le chemin d'appel entier du ou des threads.
4 En-tête de nœud Montre le nombre de processus/threads, le nom du thread et l’ID de thread pour le nœud.
5 Méthode Représente un ou plusieurs frames de pile dans la même méthode.
6 Info-bulle sur méthode Apparaît lorsque vous pointez sur une méthode. Dans la vue Threads, l’info-bulle montre tous les threads dans un tableau semblable à la fenêtre Threads.

Vue Tâches

Si votre application utilise des objets System.Threading.Tasks.Task (code managé) ou task_handle (code natif) pour exprimer le parallélisme, vous pouvez utiliser la vue Tâches. La vue Tâches contient les piles d’appels des tâches au lieu de celles des threads.

Dans la vue Tâches :

  • Les piles d’appels des threads qui n’exécutent pas de tâches n’apparaissent pas.
  • Les piles d’appels des threads qui exécutent des tâches sont tronquées visuellement en haut et en bas afin d’afficher les frames les plus pertinents appartenant aux tâches.
  • Lorsque plusieurs tâches figurent sur un thread, les piles d’appels de ces tâches sont fractionnées dans des nœuds séparés.

Pour afficher l’ensemble de la pile des appels, passez simplement en vue Threads en cliquant avec le bouton droit sur un frame de pile, puis en sélectionnant Atteindre le thread.

L’illustration suivante montre la vue Threads en haut et la vue Tâches correspondante en bas.

Screenshot of Threads and Tasks views.

Screenshot of Tasks view in Parallel Stacks window.

Pointez sur une méthode pour afficher une info-bulle avec des informations supplémentaires. Dans la vue Tâches, l’info-bulle affiche toutes les tâches d’un tableau de façon similaire à la fenêtre Tâches.

L’image suivante montre l’info-bulle d’une méthode dans la vue Threads en haut et pour la vue Tâches correspondante en bas.

Screenshot of Threads and Tasks tooltips.

Screenshot of Threads and Tasks tooltips.

Vue Méthode

À partir de la vue Threads ou de la vue Tâches, vous pouvez faire pivoter le graphique sur la méthode actuelle en sélectionnant l’icône Basculer la vue de méthode de la barre d’outils. La vue Méthode présente toutes les méthodes de tous les threads qui appellent ou sont appelés par la méthode actuelle. L’illustration suivante montre à quoi ressemblent les mêmes informations dans la vue Threads à gauche et dans la vue Méthode à droite.

Screenshot of Methods view in Parallel Stacks window.

Screenshot of Methods view in Parallel Stacks window 2022.

Si vous basculez vers un nouveau frame de pile, vous définissez cette méthode sur la méthode actuelle et Vue de méthode affiche tous les appelants et appelés pour la nouvelle méthode. Des threads peuvent alors apparaître ou disparaître de la vue, selon que cette méthode s'affiche ou non sur leurs piles des appels. Pour revenir à l’affichage de la pile des appels, sélectionnez à nouveau l’icône de barre d’outils Vue Méthode.

Tutoriel vidéo - Déboguer des threads et des tâches avec des piles parallèles

Ces tutoriels vidéo montrent comment utiliser les vues Threads et Tâches de la fenêtre Piles parallèles dans Visual Studio 2022 pour déboguer vos applications multithreads.