IDebugSymbolProvider
Diese Schnittstelle stellt einen Symbolanbieter dar, der Symbole und Typen bereitstellt und als Felder zurückgibt.
Syntax
IDebugSymbolProvider : IUnknown
Hinweise für Implementierer
Ein Symbolanbieter muss diese Schnittstelle implementieren, um Symbol- und Typinformationen an einen Ausdrucksauswerter anzugeben.
Hinweise für Aufrufer
Diese Schnittstelle wird mithilfe der CoCreateInstance
COM-Funktion (für nicht verwaltete Symbolanbieter) oder durch Laden der entsprechenden Assembly mit verwaltetem Code abgerufen und der Symbolanbieter basierend auf den informationen in dieser Assembly instanziiert. Das Debugmodul instanziiert den Symbolanbieter, um in Abstimmung mit dem Ausdrucksauswerter zu arbeiten. Sehen Sie sich das Beispiel für einen Ansatz zum Instanziieren dieser Schnittstelle an.
Methoden in Vtable-Reihenfolge
In der folgenden Tabelle sind die Methoden von IDebugSymbolProvider
aufgeführt.
Methode | Beschreibung |
---|---|
Initialize |
Veraltet. Nicht verwenden. |
Uninitialize |
Veraltet. Nicht verwenden. |
GetContainerField | Ruft das Feld ab, das die Debugadresse enthält. |
GetField |
Veraltet. Nicht verwenden. |
GetAddressesFromPosition | Karten einer Dokumentposition in einem Array von Debugadressen. |
GetAddressesFromContext | Karten einen Dokumentkontext in ein Array von Debugadressen ein. |
GetContextFromAddress | Karten eine Debugadresse in einen Dokumentkontext ein. |
GetLanguage | Ruft die Sprache ab, die zum Kompilieren des Codes an der Debugadresse verwendet wird. |
GetGlobalContainer |
Veraltet. Nicht verwenden. |
GetMethodFieldsByName | Ruft das Feld ab, das einen vollqualifizierten Methodennamen darstellt. |
GetClassTypeByName | Ruft den Klassenfeldtyp ab, der einen vollqualifizierten Klassennamen darstellt. |
GetNamespacesUsedAtAddress | Erstellt einen Enumerator für Namespaces, die der Debugadresse zugeordnet sind. |
GetTypeByName | Karten einen Symbolnamen in einen Symboltyp ein. |
GetNextAddress | Ruft die Debugadresse ab, die einer bestimmten Debugadresse in einer Methode folgt. |
Hinweise
Diese Schnittstelle ordnet Dokumentpositionen debugadressen zu und umgekehrt.
Anforderungen
Kopfzeile: sh.h
Namespace: Microsoft.VisualStudio.Debugger.Interop
Assembly: Microsoft.VisualStudio.Debugger.Interop.dll
Beispiel
In diesem Beispiel wird gezeigt, wie der Symbolanbieter anhand seiner GUID instanziiert wird (ein Debugmodul muss diesen Wert kennen).
// 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);
}