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

另请参阅