共用方式為


IDebugSymbolProvider

這個介面代表提供符號和型別的符號提供者,以字段的形式傳回它們。

語法

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

另請參閱