다음을 통해 공유


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;
}

참고 항목