IDebugSymbolProvider
如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件。
這個介面表示提供符號和型別,將其傳回做為欄位的符號提供者。
語法
IDebugSymbolProvider : IUnknown
實作者注意事項
符號提供者必須實作這個介面提供符號,然後輸入運算式評估工具的資訊。
呼叫端資訊
這個介面使用 COM 的取得CoCreateInstance
函式 (適用於 unmanaged 的符號提供者) 或載入適當的 managed 程式碼組件,該組件中找到的資訊為基礎的符號提供者具現化。 偵錯引擎具現化運算式評估工具搭配運作的符號提供者。 請參閱具現化此介面的其中一種方式的範例。
依照 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);
}