Partager via


Architecture de l’évaluateur d’expression

Important

Dans Visual Studio 2015, cette façon d’implémenter des évaluateurs d’expression est déconseillée. Pour plus d’informations sur l’implémentation d’évaluateurs d’expression CLR, consultez l’exemple d’évaluateur d’expression CLR et d’évaluateur d’expression managée.

L’intégration d’un langage propriétaire dans le package de débogage Visual Studio signifie que vous devez configurer les interfaces d’évaluateur d’expression (EE) requises et appeler le fournisseur de symboles d’exécution du langage commun (SP) et les interfaces de classeur. Les objets SP et binder, ainsi que l’adresse d’exécution actuelle, sont le contexte dans lequel les expressions sont évaluées. Les informations que ces interfaces produisent et consomment représentent les concepts clés de l’architecture d’un EE.

Analyser l’expression

Lorsque vous déboguez un programme, les expressions sont évaluées pour plusieurs raisons, mais toujours lorsque le programme en cours de débogage a été arrêté à un point d’arrêt (soit un point d’arrêt placé par l’utilisateur, soit un point d’arrêt provoqué par une exception). C’est à ce moment que Visual Studio obtient une trame de pile, telle que représentée par l’interface IDebugStackFrame2 , à partir du moteur de débogage (DE). Visual Studio appelle ensuite GetExpressionContext pour obtenir l’interface IDebugExpressionContext2 . Cette interface représente un contexte dans lequel les expressions peuvent être évaluées ; ParseText est le point d’entrée du processus d’évaluation. Jusqu’à ce stade, toutes les interfaces sont implémentées par le DE.

Lorsqu’il IDebugExpressionContext2::ParseText est appelé, le DE instancie l’EE associé à la langue du fichier source où le point d’arrêt s’est produit (le DE instancie également le SH à ce stade). L’EE est représenté par l’interface IDebugExpressionEvaluator . Le DE appelle ensuite Analyse pour convertir l’expression (sous forme de texte) en expression analysée, prête pour l’évaluation. Cette expression analysée est représentée par l’interface IDebugParsedExpression . L’expression est généralement analysée et non évaluée à ce stade.

Le DE crée un objet qui implémente l’interface IDebugExpression2, place l’objet IDebugParsedExpression dans l’objet IDebugExpression2 et retourne l’objet IDebugExpression2 à partir de IDebugExpressionContext2::ParseText.

Évaluer l’expression

Visual Studio appelle EvaluateSync ou EvaluateAsync pour évaluer l’expression analysée. Ces deux méthodes appellent EvaluateSync (IDebugExpression2::EvaluateSync appelle la méthode immédiatement, tandis qu’elle IDebugExpression2::EvaluateAsync appelle la méthode via un thread d’arrière-plan) pour évaluer l’expression analysée et retourner une interface IDebugProperty2 qui représente la valeur et le type de l’expression analysée. IDebugParsedExpression::EvaluateSync utilise le SH, l’adresse et le classeur fournis pour convertir l’expression analysée en une valeur réelle, représentée par l’interface IDebugProperty2 .

Par exemple

Une fois qu’un point d’arrêt est atteint dans un programme en cours d’exécution, l’utilisateur choisit d’afficher une variable dans la boîte de dialogue QuickWatch . Cette boîte de dialogue affiche le nom de la variable, sa valeur et son type. L’utilisateur peut généralement modifier la valeur.

Lorsque la boîte de dialogue Espion rapide s’affiche, le nom de la variable examinée est envoyé en tant que texte à ParseText. Cela renvoie un objet IDebugExpression2 représentant l’expression analysée, dans ce cas, la variable. EvaluateSync est ensuite appelé pour produire un IDebugProperty2 objet qui représente la valeur et le type de la variable, ainsi que son nom. Il s’agit de ces informations affichées.

Si l’utilisateur modifie la valeur de la variable, SetValueAsString est appelé avec la nouvelle valeur, ce qui modifie la valeur de la variable en mémoire afin qu’elle soit utilisée lors de l’exécution du programme.

Pour plus d’informations sur ce processus d’affichage des valeurs des variables, consultez Afficher les variables locales. Pour plus d’informations sur la façon dont la valeur d’une variable est modifiée, consultez La modification de la valeur d’une variable.

Contenu de cette section

Le contexte d’évaluation fournit les arguments qui sont passés lorsque le DE appelle l’EE.

Les interfaces de l’évaluateur d’expression clé décrivent les interfaces cruciales nécessaires lors de l’écriture d’un EE, ainsi que le contexte d’évaluation.