IDebugExpressionEvaluator
Important
Visual Studio 2015에서 식 계산기를 구현하는 이 방법은 더 이상 사용되지 않습니다. CLR 식 계산기 구현에 대한 자세한 내용은 CLR 식 계산기 및 관리형 식 계산기 샘플을 참조하세요.
이 인터페이스는 식 계산기를 나타냅니다.
구문
IDebugExpressionEvaluator : IUnknown
구현자에 대한 참고 사항
식 계산기는 이 인터페이스를 구현해야 합니다.
호출자 참고 사항
이 인터페이스를 가져오려면 계산기의 CLSID(클래스 ID)를 사용하여 CoCreateInstance
메서드를 통해 식 계산기를 인스턴스화합니다. 예제를 참조하세요.
Vtable 순서의 메서드
다음 표에서는 IDebugExpressionEvaluator
메서드를 보여 줍니다.
메서드 | 설명 |
---|---|
Parse | 식 문자열을 구문 분석된 식으로 변환합니다. |
GetMethodProperty | 메서드의 지역 변수, 인수 및 기타 속성을 가져옵니다. |
GetMethodLocationProperty | 메서드 위치 및 오프셋을 메모리 주소로 변환합니다. |
SetLocale | 인쇄 가능한 결과를 만드는 데 사용할 언어를 결정합니다. |
SetRegistryRoot | 레지스트리 루트를 설정합니다. 병렬 디버깅에 사용됩니다. |
설명
일반적인 상황에서 DE(디버그 엔진)는 ParseText 호출의 결과로 EE(식 계산기)를 인스턴스화합니다. DE는 사용하려는 EE의 언어 및 공급업체를 알고 있으므로 레지스트리에서 EE의 CLSID를 가져옵니다(디버깅용 SDK 도우미 함수인 GetEEMetric
이 이러한 검색에 도움이 됩니다).
EE가 인스턴스화되면 DE는 Parse를 호출하여 식을 구문 분석하고 IDebugParsedExpression 개체에 저장합니다. 나중에 EvaluateSync를 호출하여 식을 평가합니다.
요구 사항
헤더: ee.h
네임스페이스: Microsoft.VisualStudio.Debugger.Interop
어셈블리: Microsoft.VisualStudio.Debugger.Interop.dll
예시
이 예제에서는 소스 코드에서 기호 공급자 및 주소가 지정된 식 계산기를 인스턴스화하는 방법을 보여 줍니다. 이 예제에서는 GetEEMetric
디버깅용 SDK 도우미 라이브러리인 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;
}