IDebugSymbolProvider

이 인터페이스는 기호와 형식을 제공하여 필드로 반환하는 기호 공급자를 나타냅니다.

구문

IDebugSymbolProvider : IUnknown

구현자에 대한 참고 사항

기호 공급자가 식 계산기에 기호 및 형식 정보를 제공하려면 이 인터페이스를 구현해야 합니다.

호출자 참고 사항

이 인터페이스는 COM의 CoCreateInstance 함수(관리되지 않는 기호 공급자용)를 사용하거나 적절한 관리 코드 어셈블리를 로드하고 해당 어셈블리에 있는 정보를 기반으로 기호 공급자를 인스턴스화하여 가져옵니다. 디버그 엔진은 식 계산기와 함께 작동하도록 기호 공급자를 인스턴스화합니다. 이 인터페이스를 인스턴스화하는 한 가지 방법은 예제를 참조하세요.

Vtable 순서의 메서드

다음 표에서는 IDebugSymbolProvider 메서드를 보여 줍니다.

메서드 설명
Initialize 사용되지 않음. 사용하지 마십시오.
Uninitialize 사용되지 않음. 사용하지 마십시오.
GetContainerField 디버그 주소가 포함된 필드를 가져옵니다.
GetField 사용되지 않음. 사용하지 마십시오.
GetAddressesFromPosition 문서 위치를 디버그 주소 배열에 매핑합니다.
GetAddressesFromContext 문서 컨텍스트를 디버그 주소 배열에 매핑합니다.
GetContextFromAddress 디버그 주소를 문서 컨텍스트에 매핑합니다.
GetLanguage 디버그 주소에서 코드를 컴파일하는 데 사용되는 언어를 가져옵니다.
GetGlobalContainer 사용되지 않음. 사용하지 마십시오.
GetMethodFieldsByName 정규화된 메서드 이름을 나타내는 필드를 가져옵니다.
GetClassTypeByName 정규화된 클래스 이름을 나타내는 클래스 필드 형식을 가져옵니다.
GetNamespacesUsedAtAddress 디버그 주소와 연결된 네임스페이스의 열거자를 만듭니다.
GetTypeByName 기호 이름을 기호 형식에 매핑합니다.
GetNextAddress 메서드에서 지정된 디버그 주소 뒤에 있는 디버그 주소를 가져옵니다.

설명

이 인터페이스는 문서 위치를 디버그 주소에 매핑하고 그 반대로도 매핑합니다.

요구 사항

헤더: sh.h

네임스페이스: Microsoft.VisualStudio.Debugger.Interop

어셈블리: Microsoft.VisualStudio.Debugger.Interop.dll

예시

이 예제는 GUID가 지정된 기호 공급자를 인스턴스화하는 방법을 보여 줍니다(디버그 엔진은 이 값을 알고 있어야 합니다).

// A debug engine uses its own symbol provider and would know the GUID
// of that provider.
IDebugSymbolProvider *GetSymbolProvider(GUID *pSymbolProviderGuid)
{
    // This is typically defined globally. For this example, it is
    // defined here.
    static const WCHAR strRegistrationRoot[] = L"Software\\Microsoft\\VisualStudio\\8.0Exp";
    IDebugSymbolProvider *pProvider = NULL;
    if (pSymbolProviderGuid != NULL) {
        CLSID clsidProvider = { 0 };
        ::GetSPMetric(*pSymbolProviderGuid,
                      storetypeFile,
                      metricCLSID,
                      &clsidProvider,
                      strRegistrationRoot);
        if (IsEqualGUID(clsidProvider,GUID_NULL)) {
            // No file type provider, try metadata provider.
            ::GetSPMetric(*pSymbolProviderGuid,
                          ::storetypeMetadata,
                          metricCLSID,
                          &clsidProvider,
                          strRegistrationRoot);
        }
        if (!IsEqualGUID(clsidProvider,GUID_NULL)) {
            CComPtr<IDebugSymbolProvider> spSymbolProvider;
            spSymbolProvider.CoCreateInstance(clsidProvider);
            if (spSymbolProvider != NULL) {
                pProvider = spSymbolProvider.Detach();
            }
        }
    }
    return(pProvider);
}

참고 항목