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.
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.
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.
Pointez sur le cercle rouge, puis cliquez sur l’icône d’engrenage.
Cette action entraîne l’ouverture de la fenêtre Paramètres du point d’arrêt.
Cochez la case Action.
Notez que le cercle rouge devient un losange indiquant que vous êtes passé d’un point d’arrêt à un point de trace.
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.
Si vous souhaitez ajouter des conditions qui déterminent si votre message est affiché, cochez la case Conditions.
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.
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.
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.
Cochez la case Action.
Notez que le cercle rouge devient un losange indiquant que vous êtes passé d’un point d’arrêt à un point de trace.
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.
Si vous souhaitez ajouter des conditions qui déterminent si votre message est affiché, cochez la case Conditions.
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.
Si vous cliquez sur Fermer, puis déboguez le programme (F5), la sortie suivante s’affiche dans la fenêtre Sortie.
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.
Si vous cliquez sur Fermer, puis déboguez le programme (F5), la sortie suivante s’affiche dans la fenêtre Sortie.
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.
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.
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.
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.
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.
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.
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.
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.
Filtre
Pour une condition de filtre, spécifiez les appareils, les processus ou les threads pour lesquels la sortie est affichée.
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.
Liste des expressions de filtre :
MachineName
= « nom »ProcessId
= valeurProcessName
= « nom »ThreadId
= valeurThreadName
= « 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.