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.
- En code natif, la vue Tâches affiche les piles d’appels de groupes de tâches, d’algorithmes parallèles, d’agents asynchrones et de 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 | Control | Description |
---|---|---|
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. | |
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. | |
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. | |
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 | Control | Description |
---|---|---|
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. | |
Contrôle des filtres | Affiche les piles d'appels uniquement pour l'ensemble spécifique de threads qui vous intéresse. | |
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. | |
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. | |
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. | |
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ô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. | |
Indique que le frame de pile actuel a un avertissement d’état Critique, comme Interblocage. | |
Indique le nœud avec interblocage. | |
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. | |
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.
É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. |
É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.
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.
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.
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. 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.
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