IDebugSymbolProvider

このインターフェイスは、シンボルと型を提供し、それらをフィールドとして返すシンボル プロバイダーを表します。

構文

IDebugSymbolProvider : IUnknown

実装側の注意

シンボル プロバイダーでは、このインターフェイスを実装して、シンボルと型の情報を式エバリュエーターに提供する必要があります。

呼び出し元に関する注意事項

このインターフェイスを取得するには、COM の CoCreateInstance 関数を使用する (アンマネージド シンボル プロバイダーの場合) か、適切なマネージド コード アセンブリを読み込んで、そのアセンブリ内の情報に基づいてシンボル プロバイダーをインスタンス化します。 デバッグ エンジンでは、式エバリュエーターと連携して動作するようにシンボル プロバイダーをインスタンス化します。 このインターフェイスをインスタンス化する 1 つの方法については、「例」を参照してください。

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

関連項目