Programmes d’assistance SDK pour le débogage
Ces fonctions et déclarations sont des fonctions d’assistance globales pour implémenter des moteurs de débogage, des évaluateurs d’expression et des fournisseurs de symboles en C++.
Remarque
Il n’existe actuellement aucune version managée de ces fonctions et déclarations.
Pour que les moteurs de débogage, les évaluateurs d’expression et les fournisseurs de symboles soient utilisés par Visual Studio, ils doivent être inscrits. Pour ce faire, définissez les sous-clés et les entrées du Registre, sinon appelées « paramètres de métriques ». Les fonctions globales suivantes sont conçues pour faciliter le processus de mise à jour de ces métriques. Consultez la section sur les emplacements du Registre pour connaître la disposition de chaque sous-clé de Registre mise à jour par ces fonctions.
Fonctions de métriques générales
Il s’agit de fonctions générales utilisées par les moteurs de débogage. Les fonctions spécialisées pour les évaluateurs d’expression et les fournisseurs de symboles sont détaillées ultérieurement.
GetMetric, méthode
Récupère une valeur de métrique à partir du Registre.
HRESULT GetMetric(
LPCWSTR pszMachine,
LPCWSTR pszType,
REFGUID guidSection,
LPCWSTR pszMetric,
DWORD * pdwValue,
LPCWSTR pszAltRoot
);
Paramètre | Description |
---|---|
pszMachine | [in] Nom d’un ordinateur éventuellement distant dont le registre sera écrit (NULL signifie ordinateur local). |
pszType | [in] Un des types de métriques. |
guidSection | [in] GUID d’un moteur spécifique, évaluateur, exception, etc. Cela spécifie une sous-section sous un type de métrique pour un élément spécifique. |
pszMetric | [in] Métrique à obtenir. Cela correspond à un nom de valeur spécifique. |
pdwValue | [in] Emplacement de stockage de la valeur à partir de la métrique. Il existe plusieurs versions de GetMetric qui peuvent retourner un DWORD (comme dans cet exemple), un BSTR, un GUID ou un tableau de GUID. |
pszAltRoot | [in] Une autre racine de Registre à utiliser. Définissez cette option pour NULL utiliser la valeur par défaut. |
SetMetric, méthode
Définit la valeur de métrique spécifiée dans le Registre.
HRESULT SetMetric(
LPCWSTR pszType,
REFGUID guidSection,
LPCWSTR pszMetric,
const DWORD dwValue,
bool fUserSpecific,
LPCWSTR pszAltRoot
);
Paramètre | Description |
---|---|
pszType | [in] Un des types de métriques. |
guidSection | [in] GUID d’un moteur spécifique, évaluateur, exception, etc. Cela spécifie une sous-section sous un type de métrique pour un élément spécifique. |
pszMetric | [in] Métrique à obtenir. Cela correspond à un nom de valeur spécifique. |
dwValue | [in] Emplacement de stockage de la valeur dans la métrique. Il existe plusieurs versions de SetMetric qui peuvent stocker un DWORD (dans cet exemple), un BSTR, un GUID ou un tableau de GUID. |
fUserSpecific | [in] TRUE si la métrique est spécifique à l’utilisateur et si elle doit être écrite dans la ruche de l’utilisateur au lieu de la ruche de l’ordinateur local. |
pszAltRoot | [in] Une autre racine de Registre à utiliser. Définissez cette option pour NULL utiliser la valeur par défaut. |
RemoveMetric, méthode
Supprime la métrique spécifiée du Registre.
HRESULT RemoveMetric(
LPCWSTR pszType,
REFGUID guidSection,
LPCWSTR pszMetric,
LPCWSTR pszAltRoot
);
Paramètre | Description |
---|---|
pszType | [in] Un des types de métriques. |
guidSection | [in] GUID d’un moteur spécifique, évaluateur, exception, etc. Cela spécifie une sous-section sous un type de métrique pour un élément spécifique. |
pszMetric | [in] Métrique à supprimer. Cela correspond à un nom de valeur spécifique. |
pszAltRoot | [in] Une autre racine de Registre à utiliser. Définissez cette option pour NULL utiliser la valeur par défaut. |
EnumMetricSections, méthode
Énumère les différentes sections de métrique dans le Registre.
HRESULT EnumMetricSections(
LPCWSTR pszMachine,
LPCWSTR pszType,
GUID * rgguidSections,
DWORD * pdwSize,
LPCWSTR pszAltRoot
);
Paramètre | Description |
---|---|
pszMachine | [in] Nom d’un ordinateur éventuellement distant dont le registre sera écrit (NULL signifie ordinateur local). |
pszType | [in] Un des types de métriques. |
rgguidSections | [in, out] Tableau préalloué de GUID à remplir. |
pdwSize | [in] Nombre maximal de GUID pouvant être stockés dans le rgguidSections tableau. |
pszAltRoot | [in] Une autre racine de Registre à utiliser. Définissez cette option pour NULL utiliser la valeur par défaut. |
Fonctions évaluateurs d’expression
Fonction | Description |
---|---|
GetEEMetric | Récupère une valeur de métrique à partir du Registre. |
SetEEMetric | Définit la valeur de métrique spécifiée dans le Registre. |
RemoveEEMetric | Supprime la métrique spécifiée du Registre. |
GetEEMetricFile | Obtient un nom de fichier à partir de la métrique spécifiée et le charge, en retournant le contenu du fichier sous forme de chaîne. |
Fonctions d’exception
Fonction | Description |
---|---|
GetExceptionMetric | Récupère une valeur de métrique à partir du Registre. |
SetExceptionMetric | Définit la valeur de métrique spécifiée dans le Registre. |
RemoveExceptionMetric | Supprime la métrique spécifiée du Registre. |
RemoveAllExceptionMetrics | Supprime toutes les métriques d’exception du Registre. |
Fonctions du fournisseur de symboles
Fonction | Description |
---|---|
GetSPMetric | Récupère une valeur de métrique à partir du Registre. |
SetSPMetric | Définit la valeur de métrique spécifiée dans le Registre. |
RemoveSPMetric | Supprime la métrique spécifiée du Registre. |
Fonctions d’énumération
Fonction | Description |
---|---|
EnumMetricSections | Énumère toutes les métriques pour un type de métrique spécifié. |
EnumDebugEngine | Énumère les moteurs de débogage inscrits. |
EnumEEs | Énumère les évaluateurs d’expression inscrits. |
EnumExceptionMetrics | Énumère toutes les métriques d’exception. |
Définitions de métriques
Ces définitions peuvent être utilisées pour les noms de métriques prédéfinis. Les noms correspondent à différentes clés de Registre et noms de valeurs et sont tous définis en tant que chaînes de caractères larges : par exemple. extern LPCWSTR metrictypeEngine
Types de métriques prédéfinis | Description : Clé de base pour.... |
---|---|
metrictypeEngine | Toutes les métriques du moteur de débogage. |
metrictypePortSupplier | Toutes les métriques des fournisseurs de ports. |
metrictypeException | Toutes les métriques d’exception. |
metricttypeEEExtension | Toutes les extensions de l’évaluateur d’expression. |
Propriétés du moteur de débogage | Description |
---|---|
metricAddressBP | Affectez la valeur différente de zéro pour indiquer la prise en charge des points d’arrêt d’adresse. |
metricAlwaysLoadLocal | Affectez la valeur différente de zéro pour toujours charger le moteur de débogage localement. |
metricLoadInDebuggeeSession | NON UTILISÉ |
metricLoadedByDebuggee | Défini sur différent de zéro pour indiquer que le moteur de débogage sera toujours chargé avec ou par le programme en cours de débogage. |
metricAttach | Affectez la valeur différente de zéro pour indiquer la prise en charge de la pièce jointe aux programmes existants. |
metricCallStackBP | Affectez la valeur différente de zéro pour indiquer la prise en charge des points d’arrêt de la pile des appels. |
metricConditionalBP | Définissez la valeur différente de zéro pour indiquer la prise en charge du paramètre des points d’arrêt conditionnels. |
metricDataBP | Définissez la valeur différente de zéro pour indiquer la prise en charge du paramètre des points d’arrêt sur les modifications apportées aux données. |
metricDisassembly | Définissez la valeur différente de zéro pour indiquer la prise en charge de la production d’une liste désassembleur. |
metricDumpWriting | Affectez la valeur différente de zéro pour indiquer la prise en charge de l’écriture de vidage (vidage de la mémoire sur un appareil de sortie). |
metricENC | Affectez la valeur différente de zéro pour indiquer la prise en charge de La modification et de la poursuite. Remarque : Un moteur de débogage personnalisé ne doit jamais définir cette valeur ou doit toujours le définir sur 0. |
metricExceptions | Affectez la valeur différente de zéro pour indiquer la prise en charge des exceptions. |
metricFunctionBP | Affectez la valeur différente de zéro pour indiquer la prise en charge des points d’arrêt nommés (points d’arrêt qui arrêtent lorsqu’un nom de fonction est appelé). |
metricHitCountBP | Affectez la valeur différente de zéro pour indiquer la prise en charge du paramètre des points d’arrêt « point d’accès » (points d’arrêt déclenchés uniquement après avoir atteint un certain nombre de fois). |
metricJITDebug | Défini sur différent de zéro pour indiquer la prise en charge du débogage juste-à-temps (le débogueur est lancé lorsqu’une exception se produit dans un processus en cours d’exécution). |
metricMemory | NON UTILISÉ |
metricPortSupplier | Définissez-le sur le CLSID du fournisseur de ports si un fournisseur est implémenté. |
metricRegisters | NON UTILISÉ |
metricSetNextStatement | Affectez la valeur différente de zéro pour indiquer la prise en charge de la définition de l’instruction suivante (qui ignore l’exécution d’instructions intermédiaires). |
metricSuspendThread | Affectez la valeur différente de zéro pour indiquer la prise en charge de l’interruption de l’exécution de threads. |
metricWarnIfNoSymbols | Défini sur différent de zéro pour indiquer que l’utilisateur doit être averti s’il n’y a pas de symboles. |
metricProgramProvider | Définissez-le sur le CLSID du fournisseur de programmes. |
metricAlwaysLoadProgramProviderLocal | Définissez cette valeur sur différente de zéro pour indiquer que le fournisseur de programme doit toujours être chargé localement. |
metricEngineCanWatchProcess | Définissez cette valeur sur différent de zéro pour indiquer que le moteur de débogage surveille les événements de processus au lieu du fournisseur de programmes. |
metricRemoteDebugging | Définissez cette valeur sur différente de zéro pour indiquer la prise en charge du débogage à distance. |
metricEncUseNativeBuilder | Définissez cette valeur sur différente de zéro pour indiquer que le Gestionnaire de modification et de continue doit utiliser la dll encbuild.dll du moteur de débogage pour générer pour Modifier et Continuer. Remarque : Un moteur de débogage personnalisé ne doit jamais définir cette valeur ou doit toujours le définir sur 0. |
metricLoadUnderWOW64 | Définissez cette valeur sur différente de zéro pour indiquer que le moteur de débogage doit être chargé dans le processus de débogage sous WOW lors du débogage d’un processus 64 bits ; sinon, le moteur de débogage sera chargé dans le processus Visual Studio (qui s’exécute sous WOW64). |
metricLoadProgramProviderUnderWOW64 | Définissez cette valeur sur différente de zéro pour indiquer que le fournisseur de programmes doit être chargé dans le processus de débogage lors du débogage d’un processus 64 bits sous WOW ; sinon, il sera chargé dans le processus Visual Studio. |
metricStopOnExceptionCrossingManagedBoundary | Définissez cette valeur sur différent de zéro pour indiquer que le processus doit s’arrêter si une exception non gérée est levée sur des limites de code managées/non managées. |
metricAutoSelectPriority | Définissez cette valeur sur une priorité pour la sélection automatique du moteur de débogage (les valeurs supérieures sont supérieures). |
metricAutoSelectIncompatibleList | Clé de Registre contenant des entrées qui spécifient des GUID pour les moteurs de débogage à ignorer dans la sélection automatique. Ces entrées sont un nombre (0, 1, 2, et ainsi de suite) avec un GUID exprimé sous forme de chaîne. |
metricIncompatibleList | Clé de Registre contenant des entrées qui spécifient des GUID pour les moteurs de débogage incompatibles avec ce moteur de débogage. |
metricDisableJITOptimization | Définissez cette valeur sur différente de zéro pour indiquer que les optimisations juste-à-temps (pour le code managé) doivent être désactivées pendant le débogage. |
Propriétés de l’évaluateur d’expression | Description |
---|---|
metricEngine | Cela contient le nombre de moteurs de débogage qui prennent en charge l’évaluateur d’expression spécifié. |
metricPreloadModules | Définissez cette valeur sur différent de zéro pour indiquer que les modules doivent être préchargés lorsqu’un évaluateur d’expression est lancé sur un programme. |
metricThisObjectName | Définissez cette valeur sur le nom de l’objet « this ». |
Propriétés de l’extension évaluateur d’expression | Description |
---|---|
metricExtensionDll | Nom de la dll qui prend en charge cette extension. |
metricExtensionRegistersSupported | Liste des registres pris en charge. |
metricExtensionRegistersEntryPoint | Point d’entrée pour accéder aux registres. |
metricExtensionTypesSupported | Liste des types pris en charge. |
metricExtensionTypesEntryPoint | Point d’entrée pour l’accès aux types. |
Propriétés du fournisseur de ports | Description |
---|---|
metricPortPickerCLSID | CLSID du sélecteur de ports (boîte de dialogue que l’utilisateur peut utiliser pour sélectionner des ports et ajouter des ports à utiliser pour le débogage). |
metricDisallowUserEnteredPorts | Différent de zéro si les ports entrés par l’utilisateur ne peuvent pas être ajoutés au fournisseur de ports (cela rend la boîte de dialogue sélecteur de ports essentiellement en lecture seule). |
metricPidBase | ID de processus de base utilisé par le fournisseur de ports lors de l’allocation des ID de processus. |
Types de magasin de services prédéfinis | Description |
---|---|
storetypeFile | Les symboles sont stockés dans un fichier distinct. |
storetypeMetadata | Les symboles sont stockés sous forme de métadonnées dans un assembly. |
Propriétés diverses | Description |
---|---|
metricShowNonUserCode | Définissez cette valeur sur différent de zéro pour afficher le code non-utilisateur. |
metricJustMyCodeStepping | Définissez cette valeur sur différente de zéro pour indiquer que l’exécution pas à pas peut se produire uniquement dans le code utilisateur. |
metricCLSID | CLSID pour un objet d’un type de métrique spécifique. |
metricName | Nom convivial d’un objet d’un type de métrique spécifique. |
metricLanguage | Nom de la langue. |
Emplacements du Registre
Les métriques sont lues et écrites dans le Registre, en particulier dans la VisualStudio
sous-clé.
Remarque
La plupart du temps, les métriques sont écrites dans la clé HKEY_LOCAL_MACHINE. Toutefois, parfois, HKEY_CURRENT_USER sera la clé de destination. Dbgmetric.lib gère les deux clés. Lors de l’obtention d’une métrique, elle recherche d’abord HKEY_CURRENT_USER, puis HKEY_LOCAL_MACHINE. Lorsqu’il définit une métrique, un paramètre spécifie la clé de niveau supérieur à utiliser.
[clé de Registre]\
Software
\
Microsoft
\
VisualStudio
\
[racine de version]\
[racine de métrique]\
[type de métrique]\
[metric] = [valeur de la métrique]
[metric] = [valeur de la métrique]
[metric] = [valeur de la métrique]
Espace réservé | Description |
---|---|
[clé de Registre] | HKEY_CURRENT_USER ou HKEY_LOCAL_MACHINE . |
[racine de version] | Version de Visual Studio (par exemple, 7.0 , 7.1 ou 8.0 ). Toutefois, cette racine peut également être modifiée à l’aide du commutateur /rootsuffix vers devenv.exe. Pour VSIP, ce modificateur est généralement Exp, de sorte que la racine de version serait, par exemple, 8.0Exp. |
[racine de métrique] | Il s’agit de l’une AD7Metrics ou de l’autre AD7Metrics(Debug) , selon que la version de débogage de dbgmetric.lib est utilisée. Remarque : si dbgmetric.lib est utilisé ou non, cette convention d’affectation de noms doit être respectée si vous avez des différences entre les versions de débogage et de mise en production qui doivent être reflétées dans le Registre. |
[type de métrique] | Type de métrique à écrire : Engine , ExpressionEvaluator , SymbolProvider , etc. Elles sont toutes définies comme dans dbgmetric.h, metricTypeXXXX où XXXX est le nom de type spécifique. |
[métrique] | Nom d’une entrée à attribuer à une valeur pour définir la métrique. L’organisation réelle des métriques dépend du type de métrique. |
[valeur de la métrique] | Valeur affectée à la métrique. Le type que la valeur doit avoir (chaîne, nombre, etc.) dépend de la métrique. |
Remarque
Tous les GUID sont stockés au format .{GUID}
Par exemple : {123D150B-FA18-461C-B218-45B3E4589F9B}
.
Déboguer les moteurs
Voici l’organisation des métriques des moteurs de débogage dans le Registre. Engine
est le nom du type de métrique d’un moteur de débogage et correspond à [type de métrique] dans la sous-arborescence de Registre ci-dessus.
Engine
\
[guid du moteur]\
CLSID
= [guid de classe]
[metric] = [valeur de la métrique]
[metric] = [valeur de la métrique]
[metric] = [valeur de la métrique]
PortSupplier
\
0
= [guid du fournisseur de ports]
1
= [guid du fournisseur de ports]
Espace réservé | Description |
---|---|
[guid du moteur] | GUID du moteur de débogage. |
[guid de classe] | GUID de la classe qui implémente ce moteur de débogage. |
[guid du fournisseur de ports] | GUID du fournisseur de ports, le cas échéant. De nombreux moteurs de débogage utilisent le fournisseur de ports par défaut et ne spécifient donc pas leur propre fournisseur. Dans ce cas, la sous-clé PortSupplier est absente. |
Fournisseurs de ports
Voici l’organisation des métriques des fournisseurs de ports dans le Registre. PortSupplier
est le nom du type de métrique d’un fournisseur de ports et correspond à [type de métrique].
PortSupplier
\
[guid du fournisseur de ports]\
CLSID
= [guid de classe]
[metric] = [valeur de la métrique]
[metric] = [valeur de la métrique]
Espace réservé | Description |
---|---|
[guid du fournisseur de ports] | GUID du fournisseur de ports |
[guid de classe] | GUID de la classe qui implémente ce fournisseur de ports |
Fournisseurs de symboles
Voici l’organisation des métriques de fournisseur de symboles dans le Registre. SymbolProvider
est le nom du type de métrique pour le fournisseur de symboles et correspond à [type de métrique].
SymbolProvider
\
[guid du fournisseur de symboles]\
file
\
CLSID
= [guid de classe]
[metric] = [valeur de la métrique]
[metric] = [valeur de la métrique]
metadata
\
CLSID
= [guid de classe]
[metric] = [valeur de la métrique]
[metric] = [valeur de la métrique]
Espace réservé | Description |
---|---|
[guid du fournisseur de symboles] | GUID du fournisseur de symboles |
[guid de classe] | GUID de la classe qui implémente ce fournisseur de symboles |
Évaluateurs d’expression
Voici l’organisation des métriques de l’évaluateur d’expression dans le Registre. ExpressionEvaluator
est le nom du type de métrique de l’évaluateur d’expression et correspond à [type de métrique].
Remarque
Le type de métrique pour ExpressionEvaluator
lequel il n’est pas défini dans dbgmetric.h, car il est supposé que toutes les modifications de métrique pour les évaluateurs d’expression passeront par les fonctions de métrique d’évaluateur d’expression appropriées (la disposition de la ExpressionEvaluator
sous-clé est quelque peu compliquée, de sorte que les détails sont masqués dans dbgmetric.lib).
ExpressionEvaluator
\
[guid de langue]\
[guid du fournisseur]\
CLSID
= [guid de classe]
[metric] = [valeur de la métrique]
[metric] = [valeur de la métrique]
Engine
\
0
= [guid du moteur de débogage]
1
= [guid du moteur de débogage]
Espace réservé | Description |
---|---|
[guid de langue] | GUID d’une langue |
[guid du fournisseur] | GUID d’un fournisseur |
[guid de classe] | GUID de la classe qui implémente cet évaluateur d’expression |
[guid du moteur de débogage] | GUID d’un moteur de débogage avec lequel cet évaluateur d’expression fonctionne |
Extensions de l’évaluateur d’expression
Voici l’organisation des métriques d’extension de l’évaluateur d’expression dans le Registre. EEExtensions
est le nom du type de métrique pour les extensions de l’évaluateur d’expression et correspond à [type de métrique].
EEExtensions
\
[guid d’extension]\
[metric] = [valeur de la métrique]
[metric] = [valeur de la métrique]
Espace réservé | Description |
---|---|
[guid d’extension] | GUID d’une extension évaluateur d’expression |
Exceptions
Voici l’organisation des métriques d’exceptions dans le Registre. Exception
est le nom du type de métrique pour les exceptions et correspond à [type de métrique].
Exception
\
[guid du moteur de débogage]\
[types d’exceptions]\
[exception]\
[metric] = [valeur de la métrique]
[metric] = [valeur de la métrique]
[exception]\
[metric] = [valeur de la métrique]
[metric] = [valeur de la métrique]
Espace réservé | Description |
---|---|
[guid du moteur de débogage] | GUID d’un moteur de débogage qui prend en charge les exceptions. |
[types d’exceptions] | Titre général de la sous-clé identifiant la classe d’exceptions pouvant être gérée. Les noms classiques sont des exceptions C++, des exceptions Win32, des exceptions Common Language Runtime et des vérifications d’exécution natives. Ces noms sont également utilisés pour identifier une classe d’exception particulière à l’utilisateur. |
[exception] | Nom d’une exception : par exemple, _com_error ou Control-Break. Ces noms sont également utilisés pour identifier une exception particulière à l’utilisateur. |
Spécifications
Ces fichiers se trouvent dans le répertoire d’installation du Kit de développement logiciel (SDK) Microsoft Visual Studio 2010 (par défaut, [lecteur]\Program Files\Microsoft Visual Studio 2010 SDK\).
En-tête : includes\dbgmetric.h
Bibliothèque : libs\ad2de.lib, libs\dbgmetric.lib