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 :
La Vue Threads affiche les informations de la pile des appels pour tous les threads de l’application. Vous pouvez naviguer entre les threads et les frames de pile sur ces threads.
La Vue Tâches affiche les informations de la pile des appels centrées sur les tâches.
- En code managé, la vue Tâches affiche les piles d’appels d’objets System.Threading.Tasks.Task.
- Dans le code natif, la vue des tâches affiche les piles d’appels des groupes de tâches , algorithmes parallèles , agents asynchrones et tâches légères .
La Vue Méthode fait pivoter la pile des appels sur une méthode sélectionnée.
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 :
Icône | Contrôle | Description |
---|---|---|
Zone de liste modifiable Threads/Tâches ![]() |
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 la vue des tâches et la vue des fils . |
![]() |
Afficher uniquement les éléments marqués | 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. |
![]() |
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. |
![]() |
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. |
icône Bascule Zoom ![]() |
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. |
Icône | Contrôle | Description |
---|---|---|
Zone de liste modifiable Threads/Tâches ![]() |
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 la vue des tâches et la vue des fils . |
icône filtre ![]() |
Filtre Contrôle | Affiche les piles d’appels uniquement pour le groupe spécifique de threads qui vous intéresse. |
![]() |
Afficher uniquement les éléments marqués | 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. |
![]() |
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. |
![]() |
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. |
icône Bascule Zoom ![]() |
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. |
![]() |
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. |
icône enregistrer ![]() |
Contrôle Enregistrer | Vous permet d’enregistrer/exporter le contenu de la fenêtre Pile parallèle en tant qu’image. |
![]() |
Contrôle Montrer le code externe | En utilisant cette fonctionnalité, vous pouvez afficher/masquer les piles dans le code/les bibliothèques externes. |
icône ![]() |
Résumer les piles d’appels | À compter de Visual Studio 2022 version 17.13 Preview 4, vous pouvez choisir Résumer lorsque Copilot est installé et activé. Ce bouton ouvre la fenêtre de chat Copilot, préchargée avec le contexte de discussion pertinent, ce qui vous permet d’explorer les détails, notamment les états de discussion, les appels de fonction et les solutions suggérées. |
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 |
---|---|
![]() |
Indique l’emplacement actuel (frame de pile actif) du thread actuel. |
![]() |
Indique l’emplacement actuel (frame de pile actif) d’un thread non actif. |
![]() |
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 |
---|---|
![]() |
Indique l’emplacement actuel (frame de pile actif) du thread actuel. |
![]() |
Indique l’emplacement actuel (frame de pile actif) d’un thread non actif. |
![]() |
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. |
Erreur de statut ![]() |
Indique que le frame de pile actuel a un avertissement d’état Critique, comme Interblocage. |
état ![]() |
Indique le nœud avec interblocage. |
informations d’état ![]() |
Indique que le frame de pile actuel contient des informations supplémentaires comme En attente, Attente sur le verrou, Propriété de, etc. |
![]() |
Indique que la tâche actuelle est dans un état Bloqué/En attente, etc. |
Statut ![]() |
Indique la tâche 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.
Élément de menu | Description |
---|---|
Marquer | Marque l'élément sélectionné. |
Supprimer l’indicateur | Enlève le drapeau de l'élément sélectionné. |
Figer | Fige l'élément sélectionné. |
Libérer | Dégèle 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 cadres de pile appartient au thread actuel, ce cadre est sélectionné par défaut dans le sous-menu. |
Accéder à la tâche ou Accéder au fil de discussion | 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. |
Élément de menu | Description |
---|---|
Copier | Copiez l’élément sélectionné. |
Sélectionner tous les cadres ci-dessous | Sélectionne tous les frames sous la pile sélectionnée. |
Marquer | Marque l'élément sélectionné. |
Supprimer l’indicateur | Enlève le drapeau de l'élément sélectionné. |
Figer | Fige l'élément sélectionné. |
Libérer | Dégèle 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 cadres de pile appartient au thread actuel, ce cadre est sélectionné par défaut dans le sous-menu. |
Accéder à la tâche ou Accéder au fil de discussion | 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. Deux threads continuent avec Thread.Sleep, et deux continuent avec Console.WriteLine, tandis que le thread actuel continue avec SyncTextWriter.WriteLine.
Le tableau suivant décrit les principales fonctionnalités de la vue Threads :
Légende | Nom de l'élément | Description |
---|---|---|
1 | Segment de pile d'appels ou nœud | 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 | Lignes avec 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 le thread principal dans une transition de code managé vers natif. Cinq threads se trouvent dans la méthode actuelle. Quatre threads continuent à s’exécuter dans le contexte de la méthode S.C, tandis qu’un thread de travail continue dans une transition de code managé vers natif, en définissant le nom sur un thread de travail.
Le tableau suivant décrit les principales fonctionnalités de la vue Threads :
Légende | Nom de l'élément | Description |
---|---|---|
1 | Segment de pile d'appels ou nœud | 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 | Lignes avec 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. |
7 | Description du thread | Description du thread générée par IA À compter de Visual Studio 2022 version 17.13 Preview 1, cette description est présente lorsque Copilot est installé et activé. |
Vue des 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’intégralité d’une pile d’appels, revenez à la vue Threads en cliquant avec le bouton droit sur une trame de pile et en sélectionnant Aller au thread.
L’illustration suivante montre la vue Threads en haut et la vue Tâches correspondante en bas.
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.
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. Vue de méthode montre en un clin d’œil toutes les méthodes dans tous les threads qui appellent la méthode actuelle ou sont appelées par elle. L'illustration suivante montre à quoi ressemblent les mêmes informations dans la vue "Threads" à gauche et dans la vue "Method" à droite.
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.
- Déboguer des tâches avec la fenêtre Piles parallèles
- Déboguer des threads avec la fenêtre Piles parallèles