Comment : utiliser la fenêtre Threads

Mise à jour : novembre 2007

Cette rubrique s'applique à :

Édition

Visual Basic

C#

C++

Web Developer

Express

La rubrique ne s'applique pas La rubrique ne s'applique pas La rubrique ne s'applique pas La rubrique ne s'applique pas

Standard

La rubrique s'applique La rubrique s'applique La rubrique s'applique La rubrique s'applique

Pro et Team

La rubrique s'applique La rubrique s'applique La rubrique s'applique La rubrique s'applique

Légende du tableau :

La rubrique s'applique

Applicable

La rubrique ne s'applique pas

Non applicable

La rubrique s'applique mais la commande est masquée par défaut

Commande ou commandes masquées par défaut.

La fenêtre Threads permet d'examiner et de manipuler des threads dans le programme que vous déboguez.

La fenêtre Threads contient une liste de tous les threads existants de votre programme. Pour chaque thread, la liste vous fournit des informations utiles :

  • Les colonnes Nom et ID affichent le nom et le numéro d'identification du thread pour vous permettre de les identifier.

  • La colonne Priorité affiche la priorité ou la précédence que le système a assignée à chaque thread.

  • La colonne Suspendre affiche le compteur de suspension qui détermine si un thread est en mesure de s'exécuter. Pour obtenir des informations sur le compteur de suspension, consultez la section Gel et libération des threads de cette rubrique.

  • La colonne Catégorie classe les threads en tant que threads d'interface utilisateur, gestionnaires d'appel de procédure distante ou threads de travail. Cette colonne identifie également le thread principal.

  • La colonne Emplacement affiche l'emplacement source dans lequel un thread est créé.

  • La colonne d'indicateurs ne possède pas d'étiquette et est située complètement à gauche. Lorsque vous ajoutez un indicateur au thread à examiner, une icône d'indicateur apparaît dans cette colonne. Pour obtenir des instructions sur les threads avec indicateur, consultez Comment : ajouter et supprimer les indicateurs des threads.

  • Il existe enfin une autre colonne qui ne possède pas d'étiquette et qui correspond à la deuxième colonne en partant de la gauche. Il s'agit de la colonne de threads actifs. Dans cette colonne, une flèche jaune indique un thread actif.

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

  • Dans le menu Déboguer, pointez sur Fenêtres, puis cliquez sur Threads.

Pour trier la liste de threads

  1. Dans la fenêtre Threads, cliquez sur le bouton situé au-dessus des colonnes.

    • Pour placer les threads avec indicateur en haut de la liste, cliquez sur le bouton le plus à gauche.

    • Pour placer les threads actifs en haut de la liste, cliquez sur le deuxième bouton en partant de la gauche.

    • Pour trier les threads par numéro d'ID dans l'ordre croissant, cliquez sur le bouton ID.

    • Pour trier les threads par catégorie, cliquez sur le bouton Catégorie. Cette action permet de classer les threads par catégories fonctionnelles triées alphabétiquement.

    • Pour trier les threads par nom, cliquez sur le bouton Nom.

    • Pour trier les threads par emplacement source, cliquez sur le bouton Emplacement.

    • Pour placer les threads dont la priorité est la plus élevée en haut de la liste, cliquez sur le bouton Priorité.

    • Pour placer les threads avec les compteurs de suspension les plus bas en haut de la liste, cliquez sur le bouton Suspendre.

  2. Si vous souhaitez inverser l'ordre de tri, cliquez de nouveau sur le bouton. Par exemple, si vous triez par numéro d'ID de thread, les threads avec les numéros d'ID les plus petits sont placés en haut de la liste. Si vous cliquez de nouveau sur le bouton ID, les threads avec les numéros d'ID les plus élevés sont placés en haut de la liste.

Pour basculer le contexte de débogage vers un autre thread

  • Dans la fenêtre Threads, cliquez avec le bouton droit sur un thread, puis, dans le menu contextuel, sélectionnez Basculer vers le Thread.

    —ou—

  • Double-cliquez sur un thread.

    Une flèche jaune identifie le thread actif.

Gel et libération des threads

Les threads peuvent être figés ou libérés. Lorsqu'un thread est figé, le système ne démarre pas l'exécution du thread même si des ressources sont disponibles.

En code natif, les threads peuvent être interrompus ou repris en appelant les fonctions Windows SuspendThread et ResumeThread ou les fonctions MFC CWinThread::SuspendThread et CWinThread::ResumeThread. L'appel à une fonction SuspendThread ou ResumeThread modifie le compteur de suspension affiché dans la fenêtre Threads. Toutefois, le gel ou la libération d'un thread natif ne modifie pas le compteur de suspension. En code natif, un thread ne peut pas s'exécuter sauf s'il est libéré et que son compte de suspension est à zéro.

En code managé, le gel ou la libération d'un thread modifie le compteur de suspension. En code managé, un thread figé possède un compteur de suspension de 1. En code natif, il possède un compteur de suspension de 0 sauf si le thread a été interrompu par un appel SuspendThread.

Remarque :

Lors du débogage d'un appel entre un code natif et un 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 figer l'exécution d'un thread

  • Dans la fenêtre Threads, cliquez avec le bouton droit sur un thread, puis, dans le menu contextuel, sélectionnez Figer.

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

  • Dans la fenêtre Threads, cliquez avec le bouton droit sur un thread figé, puis, dans le menu contextuel, sélectionnez Libérer.

Affichage des piles d'appel de thread et commutation entre les frames

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

Pour afficher la pile d'appel d'un thread

  • Dans la fenêtre Threads, positionnez le pointeur de la souris sur la ligne correspondante au thread à examiner dans la colonne de threads actifs.

    Un DataTip s'affiche peu après. Il affiche la pile des appels du thread.

Voir aussi

Tâches

Procédure pas à pas : débogage d'une application multithread

Autres ressources

Débogage des applications multithread