IDebugSymbolProvider

This interface represents a symbol provider that provides symbols and types, returning them as fields.

IDebugSymbolProvider : IUnknown

Notes for Implementers

A symbol provider must implement this interface to supply symbol and type information to an expression evaluator.

Notes for Callers

This interface is obtained by using COM's CoCreateInstance function (for unmanaged symbol providers) or by loading the appropriate managed code assembly and instantiating the symbol provider based on the information found in that assembly. The debug engine instantiates the symbol provider to work in coordination with the expression evaluator. See the Example for one approach to instantiating this interface.

Methods in Vtable Order

The following table shows the methods of IDebugSymbolProvider.

Method

Description

Initialize

Deprecated. Do not use.

Uninitialize

Deprecated. Do not use.

IDebugSymbolProvider::GetContainerField

Gets the field that contains the debug address.

GetField

Deprecated. Do not use.

IDebugSymbolProvider::GetAddressesFromPosition

Maps a document position into an array of debug addresses.

IDebugSymbolProvider::GetAddressesFromContext

Maps a document context into an array of debug addresses.

IDebugSymbolProvider::GetContextFromAddress

Maps a debug address into a document context.

IDebugSymbolProvider::GetLanguage

Gets the language used to compile the code at the debug address.

GetGlobalContainer

Deprecated. Do not use.

IDebugSymbolProvider::GetMethodFieldsByName

Gets the field representing a fully qualified method name.

IDebugSymbolProvider::GetClassTypeByName

Gets the class field type representing a fully qualified class name.

IDebugSymbolProvider::GetNamespacesUsedAtAddress

Creates an enumerator for namespaces associated with the debug address.

IDebugSymbolProvider::GetTypeByName

Maps a symbol name to a symbol type.

IDebugSymbolProvider::GetNextAddress

Gets the debug address that follows a given debug address in a method.

Remarks

This interface maps document positions into debug addresses and vice versa.

Requirements

Header: sh.h

Namespace: Microsoft.VisualStudio.Debugger.Interop

Assembly: Microsoft.VisualStudio.Debugger.Interop.dll

Example

This example shows how to instantiate the symbol provider, given its GUID (a debug engine must know this value).

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

See Also

Concepts

Symbol Provider Interfaces