IDebugExpressionEvaluator
Essa interface representa o avaliador da expressão.
IDebugExpressionEvaluator : IUnknown
Observações para Implementadores
O avaliador da expressão deve implementar essa interface.
Observações para chamadores
Para obter essa interface, instanciar o avaliador da expressão através do CoCreateInstance método usando a classe (CLSID) ID do avaliador. Consulte o exemplo.
Métodos na ordem de Vtable
A tabela a seguir mostra os métodos de IDebugExpressionEvaluator.
Método |
Descrição |
---|---|
Converte uma seqüência de caracteres de expressão em uma expressão analisada. |
|
Obtém as variáveis locais, argumentos e outras propriedades de um método. |
|
Converte um local de método e o deslocamento em um endereço de memória. |
|
Determina qual idioma a ser usado para criar resultados de impressão. |
|
Define a raiz do registro. Usado para depuração de lado a lado. |
Comentários
Em uma situação típica, o mecanismo de depuração (DE) instancia o avaliador de expressão (EE) como resultado de uma chamada para IDebugExpressionContext2::ParseText. Como o DE sabe o idioma e o fornecedor do EE ele deseja usar, o DE obtém o CLSID do EE do registro (o SDK auxiliares para depuração função, GetEEMetric, ajuda com a recuperação).
Após o EE é instanciado, o DE chama IDebugExpressionEvaluator::Parse analisar a expressão e armazená-lo em um IDebugParsedExpression objeto. Mais tarde, uma chamada para IDebugParsedExpression::EvaluateSync avalia a expressão.
Requisitos
Cabeçalho: ee.h
Namespace: Microsoft.VisualStudio.Debugger.Interop
Assembly: Microsoft.VisualStudio.Debugger.Interop.dll
Exemplo
Este exemplo mostra como instanciar o avaliador de expressão dado a um provedor de símbolo e um endereço no código fonte. Este exemplo usa uma função, GetEEMetric, da SDK auxiliares para depuração library, dbgmetric.lib.
IDebugExpressionEvaluator GetExpressionEvaluator(IDebugSymbolProvider pSymbolProvider,
IDebugAddress *pSourceAddress)
{
// This is typically defined globally but is specified here just
// for this example.
static const WCHAR strRegistrationRoot[] = L"Software\\Microsoft\\VisualStudio\\8.0Exp";
IDebugExpressionEvaluator *pEE = NULL;
if (pSymbolProvider != NULL && pSourceAddress != NULL) {
HRESULT hr = S_OK;
GUID languageGuid = { 0 };
GUID vendorGuid = { 0 };
hr = pSymbolProvider->GetLanguage(pSourceAddress,
&languageGuid,
&vendorGuid);
if (SUCCEEDED(hr)) {
CLSID clsidEE = { 0 };
CComPtr<IDebugExpressionEvaluator> spExpressionEvaluator;
// Get the expression evaluator's CLSID from the registry.
::GetEEMetric(languageGuid,
vendorGuid,
metricCLSID,
&clsidEE,
strRegistrationRoot);
if (!IsEqualGUID(clsidEE,GUID_NULL)) {
// Instantiate the expression evaluator.
spExpressionEvaluator.CoCreateInstance(clsidEE);
}
if (spExpressionEvaluator != NULL) {
pEE = spExpressionEvaluator.Detach();
}
}
}
return pEE;
}
Consulte também
Referência
IDebugExpressionContext2::ParseText
IDebugParsedExpression::EvaluateSync