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