IDebugSymbolProvider
Questa interfaccia rappresenta un provider di simboli che fornisce simboli e tipi, restituendoli come campi.
Sintassi
IDebugSymbolProvider : IUnknown
Note per gli implementatori
Un provider di simboli deve implementare questa interfaccia per fornire informazioni sul simbolo e sul tipo a un analizzatore di espressioni.
Note per i chiamanti
Questa interfaccia viene ottenuta usando la CoCreateInstance
funzione COM (per i provider di simboli non gestiti) o caricando l'assembly di codice gestito appropriato e creando un'istanza del provider di simboli in base alle informazioni trovate in tale assembly. Il motore di debug crea un'istanza del provider di simboli per lavorare in coordinamento con l'analizzatore di espressioni. Vedere l'esempio per un approccio alla creazione di un'istanza di questa interfaccia.
Metodi nell'ordine Vtable
Nella tabella seguente vengono illustrati i metodi di IDebugSymbolProvider
.
metodo | Descrizione |
---|---|
Initialize |
Deprecato. Non utilizzare. |
Uninitialize |
Deprecato. Non utilizzare. |
GetContainerField | Ottiene il campo contenente l'indirizzo di debug. |
GetField |
Deprecato. Non utilizzare. |
GetAddressesFromPosition | Mappe una posizione del documento in una matrice di indirizzi di debug. |
GetAddressesFromContext | Mappe un contesto di documento in una matrice di indirizzi di debug. |
GetContextFromAddress | Mappe un indirizzo di debug in un contesto di documento. |
GetLanguage | Ottiene il linguaggio utilizzato per compilare il codice nell'indirizzo di debug. |
GetGlobalContainer |
Deprecato. Non utilizzare. |
GetMethodFieldsByName | Ottiene il campo che rappresenta un nome di metodo completo. |
GetClassTypeByName | Ottiene il tipo di campo della classe che rappresenta un nome di classe completo. |
GetNamespacesUsedAtAddress | Crea un enumeratore per gli spazi dei nomi associati all'indirizzo di debug. |
GetTypeByName | Mappe un nome di simbolo a un tipo di simbolo. |
GetNextAddress | Ottiene l'indirizzo di debug che segue un determinato indirizzo di debug in un metodo. |
Osservazioni:
Questa interfaccia esegue il mapping delle posizioni dei documenti in indirizzi di debug e viceversa.
Requisiti
Intestazione: sh.h
Spazio dei nomi: Microsoft.VisualStudio.Debugger.Interop
Assembly: Microsoft.VisualStudio.Debugger.Interop.dll
Esempio
In questo esempio viene illustrato come creare un'istanza del provider di simboli, dato il RELATIVO GUID (un motore di debug deve conoscere questo valore).
// 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);
}