Architecture de l’évaluateur d’expression
Important
Dans Visual Studio 2015, cette façon de mettre en œuvre les évaluateurs d’expressions est obsolète. Pour des informations sur l’implémentation des évaluateurs d’expressions CLR, veuillez consulter la rubrique Évaluateurs d’expressions CLR et Exemple d’évaluateur d’expressions géré.
L’intégration d’un langage protégé dans le package de débogage de Visual Studio signifie que vous devez configurer les interfaces d’évaluateur d’expression (EE) requises et appeler les interfaces de fournisseur de symboles (SP) et binder du langage commun. Les objets SP et binder, ainsi que l’adresse d’exécution actuelle, constituent 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 un certain nombre de raisons, mais toujours lorsque le programme débogué 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 causé par une exception). C’est à ce moment que Visual Studio obtient un frame de pile, représenté 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.
Lorsque IDebugExpressionContext2::ParseText
est appelé, le DE instancie l’EE associé au langage 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 Parse pour convertir l’expression (sous forme de texte) en une expression analysée, prête à être évaluée. 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 renvoie l’objet IDebugExpression2
à partir de l’objet 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 que IDebugExpression2::EvaluateAsync
l’appelle par l’intermédiaire d’un thread d’arrière-plan) pour évaluer l’expression analysée et renvoyer 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 binder fournis pour convertir l’expression analysée en une valeur réelle, représentée par l’interface IDebugProperty2
.
Par exemple
Après avoir atteint un point d’arrêt dans un programme en cours d’exécution, l’utilisateur choisit de visualiser 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 QuickWatch est affichée, le nom de la variable examinée est envoyé sous forme de texte à ParseText. Cet objet renvoie un objet IDebugExpression2 représentant l’expression analysée, dans ce cas, la variable. EvaluateSync est alors appelé pour produire un objet IDebugProperty2
qui représente la valeur et le type de la variable, ainsi que son nom. Ce sont ces informations qui sont 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 de sorte qu’elle sera utilisée lorsque le programme reprendra son exécution.
Consultez Affichage des variables locales pour plus de détails sur ce processus d’affichage des valeurs des variables. Consultez Modifier la valeur d’une variable locale pour plus de détails sur la manière dont la valeur d’une variable est modifiée.
Contenu de cette section
Contexte d’évaluation fournit les arguments qui sont transmis lorsque le DE appelle l’EE.
Interfaces de l’évaluateur d’expressions clés décrit les interfaces cruciales nécessaires à l’écriture d’un EE, ainsi que le contexte d’évaluation.