Consigner des informations dans la fenêtre Sortie à l’aide de points de trace dans Visual Studio

Les points de trace vous permettent de consigner des informations dans la fenêtre Sortie sous des conditions configurables, sans modifier ni arrêter le code. Cette fonctionnalité est prise en charge à la fois pour les langages managés (C#, Visual Basic, F#) et le code natif, ainsi que pour les langages tels que JavaScript et Python.

Note

Pour plus d’informations sur la journalisation des informations dans la fenêtre Sortie par programmation à l’aide d’API .NET, consultez Envoyer des messages à la fenêtre Sortie.

Prenons un exemple

L’exemple de programme suivant est une boucle for simple avec une variable de compteur (counter) qui est incrémentée d’une unité à chaque nouvelle itération de la boucle.

Screenshot of a sample counter program.

L’exemple de programme suivant est une boucle for simple avec une variable de compteur (counter) qui est incrémentée d’une unité à chaque nouvelle itération de la boucle.


using System.Diagnostics;

namespace Tracepoints
{
    public class Program
    {
        public static void Main(string[] args)
        {
            int counter = 0;
            for (int i=0; i<=10; i++)
            {
                counter +=1;
            }
        }
    }
}

Définir des points de trace dans le code source

Vous pouvez définir des points de trace en spécifiant une chaîne de sortie sous la case à cocher Action dans la fenêtre Paramètres du point d’arrêt.

  1. Pour initialiser un point de trace, commencez par cliquer dans la marge à gauche du numéro de ligne où vous souhaitez définir le point de trace.

    Screenshot showing the Breakpoint Initialization in the sample code.

  2. Pointez sur le cercle rouge, puis cliquez sur l’icône d’engrenage.

  3. Cette action entraîne l’ouverture de la fenêtre Paramètres du point d’arrêt.

    Screenshot showing Breakpoint Window.

  4. Cochez la case Action.

    Screenshot of breakpoint window with Actions Box checked.

    Notez que le cercle rouge devient un losange indiquant que vous êtes passé d’un point d’arrêt à un point de trace.

  5. Entrez le message que vous souhaitez consigner dans la zone de texte Afficher un message dans la fenêtre Sortie (pour plus d’informations, consultez les sections ultérieures de cet article).

    Votre point de trace est maintenant défini. Cliquez sur le bouton « Fermer » si tout ce que vous voulez faire est de consigner des informations dans la fenêtre Sortie.

  6. Si vous souhaitez ajouter des conditions qui déterminent si votre message est affiché, cochez la case Conditions.

    Screenshot of breakpoint window with Conditions Box checked.

    Trois possibilités s’offrent à vous pour les conditions : Expression conditionnelle, Filtre et Nombre d’accès.

Vous pouvez définir des points de trace en spécifiant une chaîne de sortie sous la case à cocher Action dans la fenêtre Paramètres du point d’arrêt.

  1. Pour initialiser un point de trace, commencez par cliquer dans la marge à gauche du numéro de ligne où vous souhaitez définir le point de trace.

    Screenshot showing the Breakpoint Initialization in the sample code.

  2. Pointez sur le cercle rouge et cliquez sur l’icône d’engrenage pour ouvrir la fenêtre Paramètres du point d’arrêt.

    Screenshot showing Breakpoint Window.

  3. Cochez la case Action.

    Screenshot of breakpoint window with Actions Box checked.

    Notez que le cercle rouge devient un losange indiquant que vous êtes passé d’un point d’arrêt à un point de trace.

  4. Entrez le message que vous souhaitez consigner dans la zone de texte Afficher un message dans la fenêtre Sortie (pour plus d’informations, consultez les sections ultérieures de cet article).

    Votre point de trace est maintenant défini. Cliquez sur le bouton « Fermer » si tout ce que vous voulez faire est de consigner des informations dans la fenêtre Sortie.

  5. Si vous souhaitez ajouter des conditions qui déterminent si votre message est affiché, cochez la case Conditions.

    Screenshot of breakpoint window with Conditions Box checked.

    Trois possibilités s’offrent à vous pour les conditions : Expression conditionnelle, Filtre et Nombre d’accès.

Menu Actions

Ce menu vous permet de consigner un message dans la fenêtre Sortie. Tapez les chaînes que vous souhaitez fournir en sortie dans la zone de message (aucun guillemet n’est requis). Si vous souhaitez afficher les valeurs des variables, veillez à utiliser des accolades.

Par exemple, si vous souhaitez afficher la valeur de la variable counter dans la console de sortie, tapez {counter} dans la zone de texte du message.

Screenshot showing Counter Output Message.

Si vous cliquez sur Fermer, puis déboguez le programme (F5), la sortie suivante s’affiche dans la fenêtre Sortie.

Screenshot showing Actions Message In Output Window.

Vous pouvez également utiliser des mots clés spéciaux pour afficher des informations plus spécifiques. Entrez le mot clé exactement comme indiqué ci-dessous (utilisez un « $ » devant chaque mot clé et seulement des majuscules pour le mot clé lui-même).

Mot clé Ce qui est affiché
$ADDRESS Instruction actuelle
$CALLER Nom de la fonction appelante
$CALLSTACK Pile des appels
$FUNCTION Nom de la fonction actuelle
$PID ID du processus
$PNAME Nom du processus
$TID ID du thread
$TNAME Nom du thread
$TICK Nombre de cycles (à partir de Windows GetTickCount)

Ce menu vous permet de consigner un message dans la fenêtre Sortie. Tapez les chaînes que vous souhaitez fournir en sortie dans la zone de message (aucun guillemet n’est requis). Si vous souhaitez afficher les valeurs des variables, veillez à utiliser des accolades.

Par exemple, si vous souhaitez afficher la valeur de la variable counter dans la console de sortie, tapez {counter} dans la zone de texte du message.

Screenshot showing Counter Output Message.

Si vous cliquez sur Fermer, puis déboguez le programme (F5), la sortie suivante s’affiche dans la fenêtre Sortie.

Screenshot showing Actions Message In Output Window.

Vous pouvez également utiliser des mots clés spéciaux pour afficher des informations plus spécifiques. Entrez le mot clé exactement comme indiqué ci-dessous (utilisez un « $ » devant chaque mot clé et seulement des majuscules pour le mot clé lui-même).

Mot clé Ce qui est affiché
$ADDRESS Instruction actuelle
$CALLER Nom de la fonction appelante
$CALLSTACK Pile des appels
$FUNCTION Nom de la fonction actuelle
$PID ID du processus
$PNAME Nom du processus
$TID ID du thread
$TNAME Nom du thread
$TICK Nombre de cycles (à partir de Windows GetTickCount)

Menu Conditions

Les conditions vous permettent de filtrer vos messages de sortie, afin qu’ils s’affichent uniquement dans certains scénarios. Trois principaux types de conditions s’offrent à vous.

Expression conditionnelle

Pour une expression conditionnelle, un message de sortie s’affiche uniquement lorsque certaines conditions sont remplies.

Pour les expressions conditionnelles, vous pouvez définir le point de trace pour fournir en sortie un message quand une certaine condition est vraie ou quand elle a changé. Par exemple, si vous souhaitez afficher uniquement la valeur du compteur pendant les itérations paires de la boucle for, vous pouvez sélectionner l’option Est vrai, puis taper i%2 == 0 dans la zone de texte du message.

Screenshot showing Conditional Expression Is True.

Si vous souhaitez fournir la valeur du compteur quand l’itération de la boucle for change, sélectionnez l’option En cas de modification et tapez i dans la zone de texte du message.

Screenshot showing when Conditional Expression is Changed.

Le comportement de l’option En cas de modification est différent pour des langages de programmation différents.

  • Pour du code natif, le débogueur ne considère pas la première évaluation de la condition comme une modification et le point d’arrêt n’est donc pas atteint à la première évaluation.
  • Pour le code managé, le débogueur atteint le point de trace lors de la première évaluation après la sélection de En cas de modification.

Pour un examen plus complet des expressions valides que vous pouvez utiliser pour définir des conditions, consultez Expressions dans le débogueur.

Pour une expression conditionnelle, un message de sortie s’affiche uniquement lorsque certaines conditions sont remplies.

Pour les expressions conditionnelles, vous pouvez définir le point de trace pour fournir en sortie un message quand une certaine condition est vraie ou quand elle a changé. Par exemple, si vous souhaitez afficher uniquement la valeur du compteur pendant les itérations paires de la boucle for, vous pouvez sélectionner l’option Est vrai, puis taper i%2 == 0 dans la zone de texte du message.

Screenshot showing Conditional Expression Is True.

Si vous souhaitez fournir la valeur du compteur quand l’itération de la boucle for change, sélectionnez l’option En cas de modification et tapez i dans la zone de texte du message.

Screenshot showing when Conditional Expression is Changed.

Le comportement de l’option En cas de modification est différent pour des langages de programmation différents.

  • Pour du code natif, le débogueur ne considère pas la première évaluation de la condition comme une modification et le point d’arrêt n’est donc pas atteint à la première évaluation.
  • Pour le code managé, le débogueur atteint le point de trace lors de la première évaluation après la sélection de En cas de modification.

Vous pouvez également définir la condition quand le point de trace peut être activé en insérant un point d’arrêt dans une section particulière du code et en cochant l’option Activer uniquement lorsque le point d’arrêt suivant a été atteint : dans le menu Paramètres du point d’arrêt. Vous pouvez choisir n’importe quel point d’arrêt dans la liste des choix.

Screenshot showing enable when a breakpoint is hit checked.

Pour un examen plus complet des expressions valides que vous pouvez utiliser pour définir des conditions, consultez Expressions dans le débogueur.

Nombre d’accès

Une condition de nombre d’accès vous permet d’envoyer la sortie uniquement une fois que la ligne de code où le point de trace est défini a été exécutée un nombre de fois donné.

Pour le nombre d’accès, vous pouvez choisir de fournir en sortie un message quand la ligne de code où le point de trace est défini a été exécutée un nombre spécifique de fois. Selon les besoins, il peut être égal à, ou être un multiple de, ou être supérieur ou égal à la valeur spécifiée du nombre d’accès. Choisissez l’option qui convient le mieux à vos besoins et tapez une valeur entière dans le champ (par exemple, 5), qui représente l’itération qui vous intéresse.

Screenshot showing Conditional Expression Hit Count.

Une condition de nombre d’accès vous permet d’envoyer la sortie uniquement une fois que la ligne de code où le point de trace est défini a été exécutée un nombre de fois donné.

Pour le nombre d’accès, vous pouvez choisir de fournir en sortie un message quand la ligne de code où le point de trace est défini a été exécutée un nombre spécifique de fois. Selon les besoins, il peut être égal à, ou être un multiple de, ou être supérieur ou égal à la valeur spécifiée du nombre d’accès. Choisissez l’option qui convient le mieux à vos besoins et tapez une valeur entière dans le champ (par exemple, 5), qui représente l’itération qui vous intéresse.

Screenshot showing Conditional Expression Hit Count.

Vous pouvez également supprimer le point d’arrêt lors du premier accès en cochant la case Supprimer le point d’arrêt une fois atteint.

Screenshot showing Remove breakpoint on first hit.

Filtre

Pour une condition de filtre, spécifiez les appareils, les processus ou les threads pour lesquels la sortie est affichée.

Screenshot showing Conditional Expression Filter.

Liste des expressions de filtre :

  • MachineName = "nom"
  • ProcessId = valeur
  • ProcessName = "nom"
  • ThreadId = valeur
  • ThreadName = "nom"

Placez les chaînes (telles que les noms) entre guillemets doubles. Les valeurs peuvent être entrées sans guillemets. Vous pouvez combiner des clauses en utilisant & (AND), || (OR), ! (NOT) et des parenthèses.

Pour une condition de filtre, spécifiez les appareils, les processus ou les threads pour lesquels la sortie est affichée.

Screenshot showing Conditional Expression Filter.

Liste des expressions de filtre :

  • MachineName = « nom »
  • ProcessId = valeur
  • ProcessName = « nom »
  • ThreadId = valeur
  • ThreadName = « nom »

Placez les chaînes (telles que les noms) entre guillemets doubles. Les valeurs peuvent être entrées sans guillemets. Vous pouvez combiner des clauses en utilisant & (AND), || (OR), ! (NOT) et des parenthèses.

Considérations

Les points de trace sont destinés à faire du débogage une expérience plus propre et plus fluide. Toutefois, certaines considérations doivent être prises en compte lorsqu’il s’agit de les utiliser.

Parfois, quand vous inspectez une propriété ou un attribut d’un objet, sa valeur peut changer. Si la valeur change pendant l’inspection, il ne s’agit pas d’un bogue provoqué par la fonctionnalité de point de trace elle-même. Toutefois, l’utilisation de points de trace pour inspecter des objets n’empêche pas les modifications accidentelles.

La façon dont les expressions sont évaluées dans la boîte de message Action peut être différente du langage que vous utilisez actuellement pour le développement. Par exemple, pour fournir en sortie une chaîne, vous n’avez pas besoin de mettre entre guillemets un message, même si vous le feriez normalement en utilisant Debug.WriteLine() ou console.log(). En outre, la syntaxe avec accolades ({ }) pour fournir en sortie des expressions peut également être différente de la convention pour fournir en sortie des valeurs dans votre langage de développement. (Toutefois, le contenu des accolades ({ }) doit toujours être écrit à l’aide de la syntaxe de votre langage de développement.)

Si vous essayez de déboguer une application active et que vous recherchez une fonctionnalité similaire, consultez notre fonctionnalité de point de journalisation dans le Débogueur de capture instantanée. Le débogueur de capture instantanée est un outil utilisé pour examiner les problèmes dans les applications de production. Les points de journalisation vous permettent également d’envoyer des messages à la fenêtre Sortie sans avoir à modifier le code source et n’affectent pas votre application en cours d’exécution. Pour plus d’informations, consultez Déboguer une application Azure en production.