Utilisation de la fenêtre Piles parallèles

La fenêtre Piles parallèles est utile pour le débogage d'applications multithread. Sa Vue Threads affiche les informations de pile d'appels de tous les threads de votre application. Elle vous permet de naviguer entre les threads et les frames de pile sur ces threads. 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.

Vue Threads

L'illustration suivante présente un thread qui est allé de Main vers A puis B et ensuite vers du code externe. Deux autres threads sont partis de code externe et sont allés vers A, mais l'un des deux a continué vers B, puis vers du code externe, tandis que l'autre a continué vers C, puis vers une AnonymousMethod.

Vue Threads de la fenêtre Piles parallèles

Dans l'illustration, le chemin d'appel du thread actuel est mis en surbrillance en bleu et le frame de pile actif est signalé par la flèche jaune. Vous pouvez modifier le frame de pile actuel en sélectionnant une autre méthode dans la fenêtre Piles parallèles. Ceci peut également entraîner le basculement du thread actuel, selon que la méthode sélectionnée fait déjà partie du thread actuel ou d'un autre thread. Le tableau suivant décrit les principales fonctionnalités de la fenêtre Piles parallèles, comme indiqué dans l'illustration.

Lettre de référence

Nom de l'élément

Description

A

Nœud ou segment de pile des appels

Contient une série de contextes de méthode pour un ou plusieurs threads. Si le nœud n'est pas relié à des flèches, il représente le chemin d'appel entier du ou des threads.

B

Surbrillance bleue

Indique le chemin d'appel du thread actuel.

C

Flèches

Relient des nœuds pour créer le chemin d'appel entier du ou des threads.

D

Info-bulle sur l'en-tête de nœud

Indique l'ID et le nom défini par l'utilisateur de chaque thread dont le chemin d'appel partage ce nœud.

E

Contexte de méthode

Représente un ou plusieurs frames de pile dans la même méthode.

F

Info-bulle sur le contexte de méthode

Affiche les détails de tous les frames de pile que le contexte de méthode représente. Les frames de pile du thread actuel sont indiqués en gras.

De plus, la fenêtre Piles parallèles affiche une icône Vue aérienne dans le volet principal lorsque le graphique est trop grand pour être contenu dans la fenêtre. Vous pouvez cliquer sur l'icône pour afficher le graphique entier dans la fenêtre.

Icônes du contexte de méthode

Le tableau suivant décrit les icônes qui fournissent des informations sur les frames de pile actifs et actuels :

Icône

Description

Flèche jaune des piles parallèles

Indique que le contexte de méthode contient le frame de pile actif du thread actuel.

Icône Threads des piles parallèles

Indique que le contexte de méthode contient le frame de pile actif d'un thread non actuel.

Flèche verte des piles parallèles

Indique que le contexte de méthode contient le frame de pile actuel. Ce nom de méthode apparaît en gras dans tous les nœuds dans lesquels il s'affiche.

Contrôles de barre d'outils

L'illustration et le tableau suivants décrivent les contrôles disponibles dans la barre d'outils Piles parallèles.

Barre d'outils de la fenêtre Piles parallèles

Lettre de référence

Contrôle

Description

A

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.

B

Afficher uniquement avec indicateur

Affiche les piles des appels uniquement pour les threads (ou tâches) signalés dans la fenêtre Threads ou Tâches parallèles.

C

Basculer dans la vue Méthode

Bascule entre la vue Pile et la vue Méthode. Pour plus d'informations, consultez Vue Méthode.

D

Défilement automatique vers le frame de pile actif

Fait défiler automatiquement le diagramme 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 diagrammes.

E

Basculer le contrôle de zoom

Affiche ou masque le contrôle de zoom. Vous pouvez également effectuer un zoom en appuyant sur CTRL et en tournant la roulette de la souris, indépendamment de la visibilité du contrôle de zoom.

Éléments de menu contextuel

L'illustration et le tableau suivants décrivent les éléments de menu contextuel disponibles lorsque vous cliquez avec le bouton droit sur un contexte de méthode dans la vue Threads ou la vue Tâches. Les six derniers éléments sont empruntés directement à la fenêtre Pile des appels et ne présentent aucun nouveau comportement.

Menu contextuel des piles parallèles

Élément de menu

Description

Atteindre la tâche (thread)

Exécute la même fonction que la zone de liste déroulante de la barre d'outils, mais conserve le même frame de pile en surbrillance.

Basculer vers le frame

Identique à la commande de menu correspondante de la fenêtre Pile des appels. Toutefois, avec les piles parallèles, plusieurs frames peuvent correspondre à un seul contexte de méthode. Par conséquent, l'élément de menu comporte des sous-menus, qui représentent chacun un frame de pile spécifique. Si l'un des frames de pile se trouve sur le thread actuel, le menu qui correspond à ce frame de pile est sélectionné.

Atteindre le code source

Accède à l'emplacement du code source qui correspond au frame de pile sur lequel l'utilisateur a cliqué avec le bouton droit.

Atteindre le code machine

Accède à l'emplacement de la fenêtre Code Machine qui correspond au frame de pile sur lequel l'utilisateur a cliqué avec le bouton droit.

Afficher le code externe

Affiche ou masque le code externe.

Affichage hexadécimal

Bascule entre affichage décimal et hexadécimal.

Informations sur le chargement de symboles

Affiche la boîte de dialogue correspondante.

Paramètres des symboles

Affiche la boîte de dialogue correspondante.

Vue Tâches

Si votre application utilise des objets System.Threading.Tasks.Task (code managé) ou des objets task_handle (code natif) pour exprimer le parallélisme, vous pouvez utiliser la zone de liste déroulante de la barre d'outils de la fenêtre Piles parallèles pour basculer en vue Tâches. La vue Tâches contient les piles d'appels des tâches et non celles des threads. Les différences entre la vue Tâches et la vue Threads sont les suivantes :

  • 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.

L'illustration suivante présente la vue Tâches de la fenêtre Piles parallèles à droite et la vue Threads correspondante à gauche.

Vue Tâches des piles parallèles

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 cliquant sur Atteindre le thread.

L'illustration montre également que les en-têtes des nœuds de la vue Tâches indiquent l'état des tâches qu'ils représentent. Comme indiqué dans le tableau précédent, vous pouvez afficher des informations supplémentaires en pointant sur un en-tête de nœud ou un contexte de méthode. L'image suivante présente les informations de l'info-bulle pour la vue Threads et la vue Tâches.

Info-bulles des piles parallèles

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 cliquant sur l'icône Vue 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 présente une vue Threads, ainsi que la façon dont les mêmes informations s'affichent dans la vue Méthode.

Vue Méthode des piles parallèles

En passant à un nouveau frame de pile, vous faites de cette méthode la méthode actuelle et affichez dans la fenêtre tous les appelants et appelés de cette 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 repasser en vue Pile, cliquez à nouveau sur le bouton de barre d'outils Vue Méthode.

Voir aussi

Tâches

Procédure pas à pas : débogage d'une application parallèle

Utilisation de la fenêtre Tâches parallèles

Procédure pas à pas : débogage d'une application parallèle

Référence

Task Class

Concepts

Programmation parallèle dans le .NET Framework

Autres ressources

Présentation du débogueur

Débogage du code managé