Helper SDK per il debug
Queste funzioni e dichiarazioni sono funzioni helper globali per l'implementazione di motori di debug, analizzatori di espressioni e provider di simboli in C++.
Nota
Al momento non sono disponibili versioni gestite di queste funzioni e dichiarazioni.
Affinché i motori di debug, gli analizzatori di espressioni e i provider di simboli vengano usati da Visual Studio, devono essere registrati. Questa operazione viene eseguita impostando sottochiavi e voci del Registro di sistema, altrimenti note come "impostazione delle metriche". Le funzioni globali seguenti sono progettate per semplificare il processo di aggiornamento di queste metriche. Vedere la sezione percorsi del Registro di sistema per scoprire il layout di ogni sottochiave del Registro di sistema aggiornata da queste funzioni.
Funzioni metriche generali
Queste sono funzioni generali usate dai motori di debug. Le funzioni specializzate per gli analizzatori di espressioni e i provider di simboli sono descritte più avanti.
Metodo GetMetric
Recupera un valore della metrica dal Registro di sistema.
HRESULT GetMetric(
LPCWSTR pszMachine,
LPCWSTR pszType,
REFGUID guidSection,
LPCWSTR pszMetric,
DWORD * pdwValue,
LPCWSTR pszAltRoot
);
Parametro | Descrizione |
---|---|
pszMachine | [in] Nome di un computer eventualmente remoto il cui registro verrà scritto (NULL significa computer locale). |
pszType | [in] Uno dei tipi di metrica. |
guidSection | [in] GUID di un motore specifico, analizzatore, eccezione e così via. Specifica una sottosezione in un tipo di metrica per un elemento specifico. |
pszMetric | [in] Metrica da ottenere. Corrisponde a un nome di valore specifico. |
pdwValue | [in] Posizione di archiviazione del valore dalla metrica. Esistono diversi tipi di GetMetric che possono restituire un DWORD (come in questo esempio), un BSTR, un GUID o una matrice di GUID. |
pszAltRoot | [in] Radice alternativa del Registro di sistema da usare. Impostare su NULL per usare l'impostazione predefinita. |
SetMetric, metodo
Imposta il valore della metrica specificato nel Registro di sistema.
HRESULT SetMetric(
LPCWSTR pszType,
REFGUID guidSection,
LPCWSTR pszMetric,
const DWORD dwValue,
bool fUserSpecific,
LPCWSTR pszAltRoot
);
Parametro | Descrizione |
---|---|
pszType | [in] Uno dei tipi di metrica. |
guidSection | [in] GUID di un motore specifico, analizzatore, eccezione e così via. Specifica una sottosezione in un tipo di metrica per un elemento specifico. |
pszMetric | [in] Metrica da ottenere. Corrisponde a un nome di valore specifico. |
dwValue | [in] Posizione di archiviazione del valore nella metrica. Esistono diversi tipi di SetMetric in grado di archiviare un DWORD (in questo esempio), un BSTR, un GUID o una matrice di GUID. |
fUserSpecific | [in] TRUE se la metrica è specifica dell'utente e se deve essere scritta nell'hive dell'utente anziché nell'hive del computer locale. |
pszAltRoot | [in] Radice alternativa del Registro di sistema da usare. Impostare su NULL per usare l'impostazione predefinita. |
RemoveMetric, metodo
Rimuove la metrica specificata dal Registro di sistema.
HRESULT RemoveMetric(
LPCWSTR pszType,
REFGUID guidSection,
LPCWSTR pszMetric,
LPCWSTR pszAltRoot
);
Parametro | Descrizione |
---|---|
pszType | [in] Uno dei tipi di metrica. |
guidSection | [in] GUID di un motore specifico, analizzatore, eccezione e così via. Specifica una sottosezione in un tipo di metrica per un elemento specifico. |
pszMetric | [in] Metrica da rimuovere. Corrisponde a un nome di valore specifico. |
pszAltRoot | [in] Radice alternativa del Registro di sistema da usare. Impostare su NULL per usare l'impostazione predefinita. |
Metodo EnumMetricSections
Enumera le varie sezioni delle metriche nel Registro di sistema.
HRESULT EnumMetricSections(
LPCWSTR pszMachine,
LPCWSTR pszType,
GUID * rgguidSections,
DWORD * pdwSize,
LPCWSTR pszAltRoot
);
Parametro | Descrizione |
---|---|
pszMachine | [in] Nome di un computer eventualmente remoto il cui registro verrà scritto (NULL significa computer locale). |
pszType | [in] Uno dei tipi di metrica. |
rgguidSections | [in, out] Matrice preallocata di GUID da compilare. |
pdwSize | [in] Numero massimo di GUID che è possibile archiviare nella rgguidSections matrice. |
pszAltRoot | [in] Radice alternativa del Registro di sistema da usare. Impostare su NULL per usare l'impostazione predefinita. |
Funzioni dell'analizzatore di espressioni
Funzione | Descrizione |
---|---|
Get edizione Enterprise Metric | Recupera un valore della metrica dal Registro di sistema. |
Set edizione Enterprise Metric | Imposta il valore della metrica specificato nel Registro di sistema. |
Remove edizione Enterprise Metric | Rimuove la metrica specificata dal Registro di sistema. |
GetEEMetricFile | Ottiene un nome di file dalla metrica specificata e lo carica, restituendo il contenuto del file come stringa. |
Funzioni di eccezione
Funzione | Descrizione |
---|---|
GetExceptionMetric | Recupera un valore della metrica dal Registro di sistema. |
SetExceptionMetric | Imposta il valore della metrica specificato nel Registro di sistema. |
RemoveExceptionMetric | Rimuove la metrica specificata dal Registro di sistema. |
RemoveAllExceptionMetrics | Rimuove tutte le metriche delle eccezioni dal Registro di sistema. |
Funzioni del provider di simboli
Funzione | Descrizione |
---|---|
GetSPMetric | Recupera un valore della metrica dal Registro di sistema. |
SetSPMetric | Imposta il valore della metrica specificato nel Registro di sistema. |
RemoveSPMetric | Rimuove la metrica specificata dal Registro di sistema. |
Funzioni di enumerazione
Funzione | Descrizione |
---|---|
EnumMetricSections | Enumera tutte le metriche per un tipo di metrica specificato. |
EnumDebugEngine | Enumera i motori di debug registrati. |
EnumEEs | Enumera gli analizzatori di espressioni registrate. |
EnumExceptionMetrics | Enumera tutte le metriche delle eccezioni. |
Definizioni delle metriche
Queste definizioni possono essere usate per i nomi di metrica predefiniti. I nomi corrispondono a varie chiavi e nomi di valore del Registro di sistema e sono tutti definiti come stringhe di caratteri wide, ad esempio extern LPCWSTR metrictypeEngine
.
Tipi di metriche predefiniti | Descrizione: chiave di base per... |
---|---|
metrictypeEngine | Tutte le metriche del motore di debug. |
metrictypePortSupplier | Tutte le metriche relative ai fornitori di porte. |
metrictypeException | Tutte le metriche delle eccezioni. |
metricttype edizione Enterprise Extension | Tutte le estensioni dell'analizzatore di espressioni. |
Proprietà del motore di debug | Descrizione |
---|---|
metricAddressBP | Impostare su diverso da zero per indicare il supporto per i punti di interruzione degli indirizzi. |
metricAlwaysLoadLocal | Impostare su diverso da zero per caricare sempre il motore di debug in locale. |
metricLoadInDebuggeeSession | NON IN USO |
metricLoadedByDebuggee | Impostare su diverso da zero per indicare che il motore di debug verrà sempre caricato con o dal programma sottoposto a debug. |
metricAttach | Impostare su diverso da zero per indicare il supporto per l'allegato ai programmi esistenti. |
metricCallStackBP | Impostare su diverso da zero per indicare il supporto per i punti di interruzione dello stack di chiamate. |
metricConditionalBP | Impostare su diverso da zero per indicare il supporto per l'impostazione dei punti di interruzione condizionali. |
metricDataBP | Impostare su diverso da zero per indicare il supporto per l'impostazione dei punti di interruzione sulle modifiche apportate ai dati. |
metricDisassembly | Impostare su diverso da zero per indicare il supporto per la produzione di un elenco disassembly. |
metricDumpWriting | Impostare su diverso da zero per indicare il supporto per la scrittura di dump (il dump della memoria in un dispositivo di output). |
metricENC | Impostare su diverso da zero per indicare il supporto per Modifica e Continuazione. Nota: un motore di debug personalizzato non deve mai impostare questo valore o deve sempre impostarlo su 0. |
metricExceptions | Impostare su diverso da zero per indicare il supporto per le eccezioni. |
metricFunctionBP | Impostare su diverso da zero per indicare il supporto per i punti di interruzione denominati (punti di interruzione che si interrompono quando viene chiamato un determinato nome di funzione). |
metricHitCountBP | Impostare su diverso da zero per indicare il supporto per l'impostazione dei punti di interruzione "hit point" (punti di interruzione attivati solo dopo aver raggiunto un determinato numero di volte). |
metricJITDebug | Impostare su diverso da zero per indicare il supporto per il debug JIT (il debugger viene avviato quando si verifica un'eccezione in un processo in esecuzione). |
metricMemory | NON IN USO |
metricPortSupplier | Impostarlo sul CLSID del fornitore di porte se ne viene implementato uno. |
metricRegisters | NON IN USO |
metricSetNextStatement | Impostare su diverso da zero per indicare il supporto per l'impostazione dell'istruzione successiva (che ignora l'esecuzione di istruzioni intermedie). |
metricSuspendThread | Impostare su diverso da zero per indicare il supporto per la sospensione dell'esecuzione del thread. |
metricWarnIfNoSymbols | Impostare su diverso da zero per indicare che l'utente deve ricevere una notifica se non sono presenti simboli. |
metricProgramProvider | Impostare questa proprietà sul CLSID del provider di programmi. |
metricAlwaysLoadProgramProviderLocal | Impostare questo valore su diverso da zero per indicare che il provider di programmi deve essere sempre caricato in locale. |
metricEngineCanWatchProcess | Impostare questo valore su diverso da zero per indicare che il motore di debug eseguirà la verifica degli eventi di elaborazione anziché del provider di programmi. |
metricRemoteDebugging | Impostare questo valore su diverso da zero per indicare il supporto per il debug remoto. |
metricEncUseNativeBuilder | Impostare questo valore su diverso da zero per indicare che Edit and Continue Manager deve usare il file encbuild.dll del motore di debug per la compilazione per Modifica e Continuazione. Nota: un motore di debug personalizzato non deve mai impostare questo valore o deve sempre impostarlo su 0. |
metricLoadUnderWOW64 | Impostare questo valore su diverso da zero per indicare che il motore di debug deve essere caricato nel processo di debug in WOW durante il debug di un processo a 64 bit; in caso contrario, il motore di debug verrà caricato nel processo di Visual Studio (in esecuzione in WOW64). |
metricLoadProgramProviderUnderWOW64 | Impostare questo valore su diverso da zero per indicare che il provider di programmi deve essere caricato nel processo di debug durante il debug di un processo a 64 bit in WOW; in caso contrario, verrà caricato nel processo di Visual Studio. |
metricStopOnExceptionCrossingManagedBoundary | Impostare questo valore su diverso da zero per indicare che il processo deve arrestarsi se viene generata un'eccezione non gestita attraverso limiti di codice gestiti o non gestiti. |
metricAutoSelectPriority | Impostare questa opzione su una priorità per la selezione automatica del motore di debug (i valori più alti sono uguali a priorità più alta). |
metricAutoSelectIncompatibleList | Chiave del Registro di sistema contenente voci che specificano GUID per i motori di debug da ignorare nella selezione automatica. Queste voci sono un numero (0, 1, 2 e così via) con un GUID espresso come stringa. |
metricIncompatibleList | Chiave del Registro di sistema contenente voci che specificano GUID per i motori di debug incompatibili con questo motore di debug. |
metricDisableJITOptimization | Impostare questo valore su diverso da zero per indicare che le ottimizzazioni JIT (per il codice gestito) devono essere disabilitate durante il debug. |
Proprietà dell'analizzatore di espressioni | Descrizione |
---|---|
metricEngine | Contiene il numero di motori di debug che supportano l'analizzatore di espressioni specificato. |
metricPreloadModules | Impostare questo valore su diverso da zero per indicare che i moduli devono essere precaricati quando un analizzatore di espressioni viene avviato su un programma. |
metricThisObjectName | Impostarlo sul nome dell'oggetto "this". |
Proprietà dell'estensione dell'analizzatore di espressioni | Descrizione |
---|---|
metricExtensionDll | Nome della dll che supporta questa estensione. |
metricExtensionRegistersSupported | Elenco dei registri supportati. |
metricExtensionRegistersEntryPoint | Punto di ingresso per l'accesso ai registri. |
metricExtensionTypesSupported | Elenco dei tipi supportati. |
metricExtensionTypesEntryPoint | Punto di ingresso per l'accesso ai tipi. |
Proprietà fornitore porta | Descrizione |
---|---|
metricPortPickerCLSID | CLSID della selezione porte (una finestra di dialogo che l'utente può usare per selezionare le porte e aggiungere porte da usare per il debug). |
metricDisallowUserEnteredPorts | Diverso da zero se le porte immesse dall'utente non possono essere aggiunte al fornitore di porte (in questo modo la finestra di dialogo di selezione porta è essenzialmente di sola lettura). |
metricPidBase | ID del processo di base usato dal fornitore di porte durante l'allocazione degli ID processo. |
Tipi di archivio SP predefiniti | Descrizione |
---|---|
storetypeFile | I simboli vengono archiviati in un file separato. |
storetypeMetadata | I simboli vengono archiviati come metadati in un assembly. |
Proprietà varie | Descrizione |
---|---|
metricShowNonUserCode | Impostare questo valore su diverso da zero per visualizzare il codice non utente. |
metricJustMyCodeStepping | Impostare questo valore su diverso da zero per indicare che l'istruzione può verificarsi solo nel codice utente. |
metricCLSID | CLSID per un oggetto di un tipo di metrica specifico. |
metricName | Nome descrittivo per un oggetto di un tipo di metrica specifico. |
metricLanguage | Nome della lingua. |
Percorsi del Registro di sistema
Le metriche vengono lette e scritte nel Registro di sistema, in particolare nella VisualStudio
sottochiave.
Nota
Nella maggior parte dei casi, le metriche verranno scritte nella chiave HKEY_LOCAL_MACHINE. Tuttavia, a volte HKEY_CURRENT_Uedizione Standard R sarà la chiave di destinazione. Dbgmetric.lib gestisce entrambe le chiavi. Quando si ottiene una metrica, cerca prima HKEY_CURRENT_Uedizione Standard R, quindi HKEY_LOCAL_MACHINE. Quando si imposta una metrica, un parametro specifica la chiave di primo livello da usare.
[chiave del Registro di sistema]\
Software
\
Microsoft
\
VisualStudio
\
[versione radice]\
[radice metrica]\
[tipo di metrica]\
[metric] = [valore metrico]
[metric] = [valore metrico]
[metric] = [valore metrico]
Segnaposto | Descrizione |
---|---|
[chiave del Registro di sistema] | HKEY_CURRENT_USER o HKEY_LOCAL_MACHINE . |
[versione radice] | Versione di Visual Studio (ad esempio, 7.0 , 7.1 o 8.0 ). Tuttavia, questa radice può anche essere modificata usando l'opzione /rootuffix per devenv.exe. Per VSIP, questo modificatore è in genere Exp, quindi la radice della versione sarà, ad esempio, 8.0Exp. |
[radice metrica] | Si tratta di AD7Metrics o AD7Metrics(Debug) , a seconda che venga usata la versione di debug di dbgmetric.lib. Nota: se viene usato dbgmetric.lib, questa convenzione di denominazione deve essere rispettata se sono presenti differenze tra le versioni di debug e di rilascio che devono essere riflesse nel Registro di sistema. |
[tipo di metrica] | Tipo di metrica da scrivere: Engine , ExpressionEvaluator , e SymbolProvider così via. Questi sono tutti definiti come in dbgmetric.h come metricTypeXXXX , dove XXXX è il nome di tipo specifico. |
[metrica] | Nome di una voce a cui assegnare un valore per impostare la metrica. L'organizzazione effettiva delle metriche dipende dal tipo di metrica. |
[valore metrico] | Valore assegnato alla metrica. Il tipo che il valore deve avere (stringa, numero e così via) dipende dalla metrica. |
Nota
Tutti i GUID vengono archiviati nel formato .{GUID}
Ad esempio: {123D150B-FA18-461C-B218-45B3E4589F9B}
.
Motori di debug
Di seguito è riportata l'organizzazione delle metriche dei motori di debug nel Registro di sistema. Engine
è il nome del tipo di metrica per un motore di debug e corrisponde a [tipo di metrica] nel sottoalbero del Registro di sistema precedente.
Engine
\
[guid motore]\
CLSID
= [guid di classe]
[metric] = [valore metrico]
[metric] = [valore metrico]
[metric] = [valore metrico]
PortSupplier
\
0
= [port supplier guid]
1
= [port supplier guid]
Segnaposto | Descrizione |
---|---|
[guid motore] | GUID del motore di debug. |
[guid di classe] | GUID della classe che implementa questo motore di debug. |
[port supplier guid] | GUID del fornitore di porte, se presente. Molti motori di debug usano il fornitore di porte predefinito e pertanto non specificano il proprio fornitore. In questo caso, la sottochiave PortSupplier sarà assente. |
Fornitori di porte
Di seguito è riportata l'organizzazione delle metriche dei fornitori di porte nel Registro di sistema. PortSupplier
è il nome del tipo di metrica per un fornitore di porte e corrisponde a [tipo di metrica].
PortSupplier
\
[port supplier guid]\
CLSID
= [guid di classe]
[metric] = [valore metrico]
[metric] = [valore metrico]
Segnaposto | Descrizione |
---|---|
[port supplier guid] | GUID del fornitore di porte |
[guid di classe] | GUID della classe che implementa questo fornitore di porte |
Provider di simboli
Di seguito è riportata l'organizzazione delle metriche dei fornitori di simboli nel Registro di sistema. SymbolProvider
è il nome del tipo di metrica per il provider di simboli e corrisponde a [tipo di metrica].
SymbolProvider
\
[guid provider di simboli]\
file
\
CLSID
= [guid di classe]
[metric] = [valore metrico]
[metric] = [valore metrico]
metadata
\
CLSID
= [guid di classe]
[metric] = [valore metrico]
[metric] = [valore metrico]
Segnaposto | Descrizione |
---|---|
[guid provider di simboli] | GUID del provider di simboli |
[guid di classe] | GUID della classe che implementa questo provider di simboli |
Analizzatori di espressioni
Di seguito è riportata l'organizzazione delle metriche dell'analizzatore di espressioni nel Registro di sistema. ExpressionEvaluator
è il nome del tipo di metrica per l'analizzatore di espressioni e corrisponde a [tipo di metrica].
Nota
Il tipo di metrica per ExpressionEvaluator
non è definito in dbgmetric.h, perché si presuppone che tutte le modifiche delle metriche per gli analizzatori di espressioni attraverseranno le funzioni di metrica dell'analizzatore di espressioni appropriate (il layout della ExpressionEvaluator
sottochiave è piuttosto complicato, quindi i dettagli sono nascosti all'interno di dbgmetric.lib).
ExpressionEvaluator
\
[guid lingua]\
[guid fornitore]\
CLSID
= [guid di classe]
[metric] = [valore metrico]
[metric] = [valore metrico]
Engine
\
0
= [GUID del motore di debug]
1
= [GUID del motore di debug]
Segnaposto | Descrizione |
---|---|
[guid lingua] | GUID di una lingua |
[guid fornitore] | GUID di un fornitore |
[guid di classe] | GUID della classe che implementa questo analizzatore di espressioni |
[GUID del motore di debug] | GUID di un motore di debug usato da questo analizzatore di espressioni |
Estensioni dell'analizzatore di espressioni
Di seguito è riportata l'organizzazione delle metriche di estensione dell'analizzatore di espressioni nel Registro di sistema. EEExtensions
è il nome del tipo di metrica per le estensioni dell'analizzatore di espressioni e corrisponde a [tipo di metrica].
EEExtensions
\
[GUID estensione]\
[metric] = [valore metrico]
[metric] = [valore metrico]
Segnaposto | Descrizione |
---|---|
[GUID estensione] | GUID di un'estensione dell'analizzatore di espressioni |
Eccezioni
Di seguito è riportata l'organizzazione delle metriche delle eccezioni nel Registro di sistema. Exception
è il nome del tipo di metrica per le eccezioni e corrisponde a [tipo di metrica].
Exception
\
[GUID del motore di debug]\
[tipi di eccezione]\
[eccezione]\
[metric] = [valore metrico]
[metric] = [valore metrico]
[eccezione]\
[metric] = [valore metrico]
[metric] = [valore metrico]
Segnaposto | Descrizione |
---|---|
[GUID del motore di debug] | GUID di un motore di debug che supporta le eccezioni. |
[tipi di eccezione] | Titolo generale per la sottochiave che identifica la classe di eccezioni che è possibile gestire. I nomi tipici sono eccezioni C++, eccezioni Win32, eccezioni Common Language Runtime e controlli di runtime nativi. Questi nomi vengono usati anche per identificare una determinata classe di eccezione per l'utente. |
[eccezione] | Nome di un'eccezione: ad esempio, _com_error o Control-Break. Questi nomi vengono usati anche per identificare una particolare eccezione all'utente. |
Requisiti
Questi file si trovano nella directory di installazione di Microsoft Visual Studio 2010 SDK (per impostazione predefinita[ unità]\Programmi\Microsoft Visual Studio 2010 SDK\).
Intestazione: includes\dbgmetric.h
Libreria: libs\ad2de.lib, libs\dbgmetric.lib