Key Expression Evaluator Interfaces
When writing an expression evaluator (EE), along with the evaluation context, you should be familiar with the following interfaces.
Interface Descriptions
-
Has a single method, IDebugAddress::GetAddress, which gets a data structure that represents the current point of execution. This data structure is one of the three arguments that the debug engine (DE) passes to the IDebugParsedExpression::EvaluateSync method to evaluate an expression. This interface is typically implemented by the symbol provider.
-
Has the IDebugBinder::Bind method, which gets the memory area that contains the current value of a symbol. Given both the containing method, represented by an IDebugObject object, and the symbol itself, represented by an IDebugField object, IDebugBinder::Bind returns the value of the symbol. IDebugBinder is typically implemented by the DE.
-
Represents a simple data type. For more complex types, such as arrays and methods, use the derived IDebugArrayField and IDebugMethodField interfaces, respectively. IDebugContainerField is another important derived interface that represents symbols containing other symbols, like methods or classes. The IDebugField interface (and its derivatives) is typically implemented by the symbol provider.
An IDebugField object can be used to find the name and type of a symbol and, together with an IDebugBinder object, can be used to find its value.
-
Represents the actual bits of the run-time value of a symbol. IDebugBinder::Bind takes an IDebugField object, which represents a symbol, and returns an IDebugObject object. The IDebugObject::GetValue method returns the value of the symbol in a memory buffer. A DE typically implements this interface to represent the value of a property in memory.
-
This interface represents the expression evaluator itself. The key method is IDebugExpressionEvaluator::Parse, which returns an IDebugParsedExpression interface.
-
This interface represents a parsed expression ready to be evaluated. The key method is IDebugParsedExpression::EvaluateSync which returns an IDebugProperty2 representing the value and type of the expression.
-
This interface represents a value and its type and is the result of an expression evaluation.