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