Freigeben über


SDK-Hilfsprogramme für das Debuggen

Diese Funktionen und Deklarationen sind globale Hilfsfunktionen zum Implementieren von Debugmodulen, Ausdrucksauswertern und Symbolanbietern in C++.

Hinweis

Derzeit gibt es keine verwalteten Versionen dieser Funktionen und Deklarationen.

Damit Debugmodule, Ausdrucksauswerter und Symbolanbieter von Visual Studio verwendet werden können, müssen sie registriert werden. Dies geschieht durch Festlegen von Registrierungsunterschlüsseln und Einträgen, die auch als "Einstellungsmetriken" bezeichnet werden. Die folgenden globalen Funktionen sind so konzipiert, dass der Prozess der Aktualisierung dieser Metriken erleichtert wird. Weitere Informationen zum Layout jedes Registrierungsunterschlüssels, der von diesen Funktionen aktualisiert wird, finden Sie im Abschnitt zu Registrierungsspeicherorten.

Allgemeine Metrikfunktionen

Dies sind allgemeine Funktionen, die von Debugmodulen verwendet werden. Spezielle Funktionen für Ausdrucksauswerter und Symbolanbieter werden später ausführlich beschrieben.

GetMetric-Methode

Ruft einen Metrikwert aus der Registrierung ab.

HRESULT GetMetric(
   LPCWSTR pszMachine,
   LPCWSTR pszType,
   REFGUID guidSection,
   LPCWSTR pszMetric,
   DWORD * pdwValue,
   LPCWSTR pszAltRoot
);
Parameter Beschreibung
pszMachine [in] Name eines möglicherweise Remotecomputers, dessen Register geschrieben werden (NULL bedeutet lokaler Computer).
pszType [in] Einer der Metriktypen.
guidSection [in] GUID eines bestimmten Moduls, Evaluators, Ausnahme usw. Dadurch wird ein Unterabschnitt unter einem Metriktyp für ein bestimmtes Element angegeben.
pszMetric [in] Die zu erhaltende Metrik. Dies entspricht einem bestimmten Wertnamen.
pdwValue [in] Der Speicherort des Werts aus der Metrik. Es gibt mehrere Varianten von GetMetric, die ein DWORD (wie in diesem Beispiel), einen BSTR, eine GUID oder ein Array von GUIDs zurückgeben können.
pszAltRoot [in] Ein alternativer Registrierungsstamm, der verwendet werden soll. Legen Sie diese Einstellung fest, NULL um die Standardeinstellung zu verwenden.

SetMetric-Methode

Legt den angegebenen Metrikwert in der Registrierung fest.

HRESULT SetMetric(
         LPCWSTR pszType,
         REFGUID guidSection,
         LPCWSTR pszMetric,
   const DWORD   dwValue,
         bool    fUserSpecific,
         LPCWSTR pszAltRoot
);
Parameter Beschreibung
pszType [in] Einer der Metriktypen.
guidSection [in] GUID eines bestimmten Moduls, Evaluators, Ausnahme usw. Dadurch wird ein Unterabschnitt unter einem Metriktyp für ein bestimmtes Element angegeben.
pszMetric [in] Die zu erhaltende Metrik. Dies entspricht einem bestimmten Wertnamen.
dwValue [in] Der Speicherort des Werts in der Metrik. Es gibt mehrere Varianten von SetMetric, die ein DWORD (in diesem Beispiel), einen BSTR, eine GUID oder ein Array von GUIDs speichern können.
fUserSpecific [in] TRUE, wenn die Metrik benutzerspezifisch ist und in die Struktur des Benutzers anstelle der lokalen Computerstruktur geschrieben werden soll.
pszAltRoot [in] Ein alternativer Registrierungsstamm, der verwendet werden soll. Legen Sie diese Einstellung fest, NULL um die Standardeinstellung zu verwenden.

RemoveMetric-Methode

Entfernt die angegebene Metrik aus der Registrierung.

HRESULT RemoveMetric(
   LPCWSTR pszType,
   REFGUID guidSection,
   LPCWSTR pszMetric,
   LPCWSTR pszAltRoot
);
Parameter Beschreibung
pszType [in] Einer der Metriktypen.
guidSection [in] GUID eines bestimmten Moduls, Evaluators, Ausnahme usw. Dadurch wird ein Unterabschnitt unter einem Metriktyp für ein bestimmtes Element angegeben.
pszMetric [in] Die zu entfernende Metrik. Dies entspricht einem bestimmten Wertnamen.
pszAltRoot [in] Ein alternativer Registrierungsstamm, der verwendet werden soll. Legen Sie diese Einstellung fest, NULL um die Standardeinstellung zu verwenden.

EnumMetricSections-Methode

Listet die verschiedenen Metrikabschnitte in der Registrierung auf.

HRESULT EnumMetricSections(
   LPCWSTR pszMachine,
   LPCWSTR pszType,
   GUID *  rgguidSections,
   DWORD * pdwSize,
   LPCWSTR pszAltRoot
);
Parameter Beschreibung
pszMachine [in] Name eines möglicherweise Remotecomputers, dessen Register geschrieben werden (NULL bedeutet lokaler Computer).
pszType [in] Einer der Metriktypen.
rgguidSections [in, out] Vorallocated array of GUIDs to be filled in.
pdwSize [in] Die maximale Anzahl von GUIDs, die im rgguidSections Array gespeichert werden können.
pszAltRoot [in] Ein alternativer Registrierungsstamm, der verwendet werden soll. Legen Sie diese Einstellung fest, NULL um die Standardeinstellung zu verwenden.

Ausdrucksauswertungsfunktionen

Funktion Beschreibung
GetEEMetric Ruft einen Metrikwert aus der Registrierung ab.
SetEEMetric Legt den angegebenen Metrikwert in der Registrierung fest.
RemoveEEMetric Entfernt die angegebene Metrik aus der Registrierung.
GetEEMetricFile Ruft einen Dateinamen aus der angegebenen Metrik ab und lädt ihn, und gibt den Dateiinhalt als Zeichenfolge zurück.

Ausnahmefunktionen

Funktion Beschreibung
GetExceptionMetric Ruft einen Metrikwert aus der Registrierung ab.
SetExceptionMetric Legt den angegebenen Metrikwert in der Registrierung fest.
RemoveExceptionMetric Entfernt die angegebene Metrik aus der Registrierung.
RemoveAllExceptionMetrics Entfernt alle Ausnahmemetriken aus der Registrierung.

Symbolanbieterfunktionen

Funktion Beschreibung
GetSPMetric Ruft einen Metrikwert aus der Registrierung ab.
SetSPMetric Legt den angegebenen Metrikwert in der Registrierung fest.
RemoveSPMetric Entfernt die angegebene Metrik aus der Registrierung.

Aufzählungsfunktionen

Funktion Beschreibung
EnumMetricSections Listet alle Metriken für einen angegebenen Metriktyp auf.
EnumDebugEngine Listet die registrierten Debugmodule auf.
EnumEEs Listet die registrierten Ausdrucksauswerter auf.
EnumExceptionMetrics Listet alle Ausnahmemetriken auf.

Metrikdefinitionen

Diese Definitionen können für vordefinierte Metriknamen verwendet werden. Die Namen entsprechen verschiedenen Registrierungsschlüsseln und Wertnamen und sind alle als breite Zeichenfolgen definiert: z. B extern LPCWSTR metrictypeEngine. .

Vordefinierte Metriktypen Beschreibung: Der Basisschlüssel für....
metrictypeEngine Alle Debugmodulmetriken.
metrictypePortSupplier Alle Metriken des Portanbieters.
metrictypeException Alle Ausnahmemetriken.
metricttypeEEExtension Alle Ausdrucksauswertungserweiterungen.
Debugmoduleigenschaften Beschreibung
metricAddressBP Auf "Nonzero" festgelegt, um die Unterstützung für Adresstrennpunkte anzugeben.
metricAlwaysLoadLocal Legen Sie diese Einstellung auf "nonzero" fest, um das Debugmodul immer lokal zu laden.
metricLoadInDebuggeeSession NICHT VERWENDET
metricLoadedByDebuggee Legen Sie diese Einstellung auf "nonzero" fest, um anzugeben, dass das Debugmodul immer mit oder durch das zu debuggende Programm geladen wird.
metricAttach Legen Sie diese Einstellung auf "nonzero" fest, um die Unterstützung für Anlagen an vorhandene Programme anzugeben.
metricCallStackBP Legen Sie diesen Satz auf "nonzero" fest, um die Unterstützung für Anrufstapel-Haltepunkte anzugeben.
metricConditionalBP Legen Sie diese Einstellung auf "nonzero" fest, um die Unterstützung für die Einstellung von bedingten Haltepunkten anzugeben.
metricDataBP Auf "Nonzero" festgelegt, um die Unterstützung für die Einstellung von Haltepunkten für Änderungen in Daten anzugeben.
metricDisassembly Auf "Nonzero" festgelegt, um die Unterstützung für die Produktion einer Demontageauflistung anzugeben.
metricDumpWriting Legen Sie auf "nonzero" fest, um die Unterstützung für das Schreiben von Dumps (das Dumping des Speichers auf ein Ausgabegerät) anzugeben.
metricENC Auf "Nonzero" festgelegt, um die Unterstützung für "Bearbeiten" und "Weiter" anzugeben. Hinweis: Ein benutzerdefiniertes Debugmodul sollte dies niemals festlegen oder immer auf 0 festlegen.
metricExceptions Legen Sie diese Einstellung auf "nonzero" fest, um die Unterstützung für Ausnahmen anzugeben.
metricFunctionBP Legen Sie diesen Wert auf "nonzero" fest, um die Unterstützung für benannte Haltepunkte anzugeben (Haltepunkte, die beim Aufrufen eines bestimmten Funktionsnamens unterbrechen).
metricHitCountBP Legen Sie diesen Wert auf "nonzero" fest, um die Unterstützung für die Einstellung von "Hitpoint"-Haltepunkten anzugeben (Haltepunkte, die nur ausgelöst werden, nachdem eine bestimmte Anzahl von Malen getroffen wurde).
metricJITDebug Wird auf "nonzero" festgelegt, um die Unterstützung für das Just-in-Time-Debugging anzugeben (der Debugger wird gestartet, wenn eine Ausnahme in einem ausgeführten Prozess auftritt).
metricMemory NICHT VERWENDET
metricPortSupplier Legen Sie dies auf die CLSID des Portanbieters fest, wenn eine implementiert ist.
metricRegisters NICHT VERWENDET
metricSetNextStatement Legen Sie auf "nonzero" fest, um die Unterstützung für das Festlegen der nächsten Anweisung anzugeben (wodurch die Ausführung von Zwischenanweisungen übersprungen wird).
metricSuspendThread Legen Sie die Einstellung auf "nonzero" fest, um die Unterstützung für die Ausführung von Threads anzugeben.
metricWarnIfNoSymbols Legen Sie diese Einstellung auf "nonzero" fest, um anzugeben, dass der Benutzer benachrichtigt werden soll, wenn keine Symbole vorhanden sind.
metricProgramProvider Legen Sie dies auf die CLSID des Programmanbieters fest.
metricAlwaysLoadProgramProviderLocal Legen Sie dies auf "nonzero" fest, um anzugeben, dass der Programmanbieter immer lokal geladen werden soll.
metricEngineCanWatchProcess Legen Sie dies auf "nonzero" fest, um anzugeben, dass das Debugmodul auf Prozessereignisse anstelle des Programmanbieters überwacht.
metricRemoteDebugging Legen Sie dies auf "nonzero" fest, um die Unterstützung für das Remotedebugging anzugeben.
metricEncUseNativeBuilder Legen Sie dies auf "nonzero" fest, um anzugeben, dass der Bearbeitungs- und Fortsetzungs-Manager die encbuild.dll des Debugmoduls zum Erstellen für "Bearbeiten" und "Weiter" verwenden soll. Hinweis: Ein benutzerdefiniertes Debugmodul sollte dies niemals festlegen oder immer auf 0 festlegen.
metricLoadUnderWOW64 Legen Sie dies auf "nonzero" fest, um anzugeben, dass das Debugmodul beim Debuggen eines 64-Bit-Prozesses im Debugprozess unter WOW geladen werden soll. andernfalls wird das Debugmodul im Visual Studio-Prozess geladen (das unter WOW64 ausgeführt wird).
metricLoadProgramProviderUnderWOW64 Legen Sie dies auf "nonzero" fest, um anzugeben, dass der Programmanbieter beim Debuggen eines 64-Bit-Prozesses unter WOW im Debuggeeprozess geladen werden soll; andernfalls wird sie im Visual Studio-Prozess geladen.
metricStopOnExceptionCrossingManagedBoundary Legen Sie diesen Wert auf "nonzero" fest, um anzugeben, dass der Prozess beendet werden soll, wenn eine unbehandelte Ausnahme über verwaltete/nicht verwaltete Codegrenzen hinweg ausgelöst wird.
metricAutoSelectPriority Legen Sie dies auf eine Priorität für die automatische Auswahl des Debugmoduls fest (höhere Werte entsprechen höherer Priorität).
metricAutoSelectIncompatibleList Registrierungsschlüssel mit Einträgen, die GUIDs für Debugmodule angeben, die in der automatischen Auswahl ignoriert werden sollen. Diese Einträge sind eine Zahl (0, 1, 2 usw.) mit einer GUID, die als Zeichenfolge ausgedrückt wird.
metricIncompatibleList Registrierungsschlüssel mit Einträgen, die GUIDs für Debugmodule angeben, die mit diesem Debugmodul nicht kompatibel sind.
metricDisableJITOptimization Legen Sie dies auf "nonzero" fest, um anzugeben, dass Just-in-Time-Optimierungen (für verwalteten Code) beim Debuggen deaktiviert werden sollen.
Ausdrucksauswertungseigenschaften Beschreibung
metricEngine Dies enthält die Anzahl der Debugmodule, die den angegebenen Ausdrucksauswerter unterstützen.
metricPreloadModules Legen Sie diesen Wert auf "nonzero" fest, um anzugeben, dass Module vorgeladen werden sollen, wenn ein Ausdrucks-Evaluator für ein Programm gestartet wird.
metricThisObjectName Legen Sie dies auf den Objektnamen "this" fest.
Eigenschaften der Ausdrucksauswertungserweiterung Beschreibung
metricExtensionDll Name der DLL, die diese Erweiterung unterstützt.
metricExtensionRegistersSupported Liste der unterstützten Register.
metricExtensionRegistersEntryPoint Einstiegspunkt für den Zugriff auf Register.
metricExtensionTypesSupported Liste der unterstützten Typen.
metricExtensionTypesEntryPoint Einstiegspunkt für den Zugriff auf Typen.
Eigenschaften des Portanbieters Beschreibung
metricPortPickerCLSID Die CLSID der Portauswahl (ein Dialogfeld, das der Benutzer verwenden kann, um Ports auszuwählen und Ports zum Debuggen hinzuzufügen).
metricDisallowUserEnteredPorts Nonzero, wenn die vom Benutzer eingegebenen Ports dem Portlieferanten nicht hinzugefügt werden können (dadurch wird das Dialogfeld "Portauswahl" im Wesentlichen schreibgeschützt).
metricPidBase Die Basisprozess-ID, die vom Portanbieter beim Zuordnen von Prozess-IDs verwendet wird.
Vordefinierte SP Store-Typen Beschreibung
storetypeFile Die Symbole werden in einer separaten Datei gespeichert.
storetypeMetadata Die Symbole werden als Metadaten in einer Assembly gespeichert.
Verschiedene Eigenschaften Beschreibung
metricShowNonUserCode Legen Sie dies auf "nonzero" fest, um Nichtbenutzercode anzuzeigen.
metricJustMyCodeStepping Legen Sie dies auf "nonzero" fest, um anzugeben, dass das Schritten nur im Benutzercode erfolgen kann.
metricCLSID CLSID für ein Objekt eines bestimmten Metriktyps.
metricName Benutzerfreundlicher Name für ein Objekt eines bestimmten Metriktyps.
metricLanguage Sprachname.

Registrierungsspeicherorte

Die Metriken werden aus der Registrierung gelesen und in die VisualStudio Registrierung geschrieben, insbesondere im Unterschlüssel.

Hinweis

Meistens werden die Metriken in den HKEY_LOCAL_MACHINE Schlüssel geschrieben. Manchmal ist HKEY_CURRENT_USER jedoch der Zielschlüssel. Dbgmetric.lib behandelt beide Schlüssel. Beim Abrufen einer Metrik durchsucht sie zuerst HKEY_CURRENT_USER und HKEY_LOCAL_MACHINE. Wenn eine Metrik festgelegt wird, gibt ein Parameter an, welcher Schlüssel der obersten Ebene verwendet werden soll.

[Registrierungsschlüssel]\

Software\

Microsoft\

VisualStudio\

[Versionsstamm]\

[Metrikstamm]\

[Metriktyp]\

[Metrik] = [metrischer Wert]

[Metrik] = [metrischer Wert]

[Metrik] = [metrischer Wert]

Platzhalter Beschreibung
[Registrierungsschlüssel] HKEY_CURRENT_USER oder HKEY_LOCAL_MACHINE
[Versionsstamm] Die Version von Visual Studio (z. B 7.0. , , 7.1oder 8.0). Dieser Stamm kann jedoch auch mit dem Switch /rootsuffix zu devenv.exe geändert werden. Bei VSIP ist dieser Modifizierer in der Regel "Exp", sodass der Versionsstamm z. B. 8.0Exp wäre.
[Metrikstamm] Dies ist entweder AD7Metrics oder AD7Metrics(Debug), je nachdem, ob die Debugversion von dbgmetric.lib verwendet wird. Hinweis: Unabhängig davon, ob dbgmetric.lib verwendet wird, sollte diese Benennungskonvention eingehalten werden, wenn Sie Unterschiede zwischen Debug- und Releaseversionen haben, die in der Registrierung widerzuspiegeln sind.
[Metriktyp] Der Typ der zu schreibenden Metrik: Engine, , ExpressionEvaluator, SymbolProvider, usw. Diese sind alle wie in dbgmetric.h als metricTypeXXXXdefiniert, wobei XXXX es sich um den spezifischen Typnamen handelt.
[Metrik] Der Name eines Eintrags, dem ein Wert zugewiesen werden soll, um die Metrik festzulegen. Die tatsächliche Organisation der Metriken hängt vom Metriktyp ab.
[Metrikwert] Der Wert, der der Metrik zugewiesen ist. Der Typ, über den der Wert verfügen soll (Zeichenfolge, Zahl usw.), hängt von der Metrik ab.

Hinweis

Alle GUIDs werden im Format von {GUID}. Beispielsweise {123D150B-FA18-461C-B218-45B3E4589F9B}.

Debugmodule

Es folgt die Organisation der Metriken der Debugmodule in der Registrierung. Engine ist der Name des Metriktyps für ein Debugmodul und entspricht [metrischem Typ] in der obigen Registrierungsunterstruktur.

Engine\

[Modul-GUID]\

CLSID = [Klassen-GUID]

[Metrik] = [metrischer Wert]

[Metrik] = [metrischer Wert]

[Metrik] = [metrischer Wert]

PortSupplier\

0 = [Port supplier guid]

1 = [Port supplier guid]

Platzhalter Beschreibung
[Modul-GUID] Die GUID des Debugmoduls.
[Klassen-GUID] Die GUID der Klasse, die dieses Debugmodul implementiert.
[Port supplier guid] Die GUID des Portanbieters, falls vorhanden. Viele Debugmodule verwenden den Standardportanbieter und geben daher keinen eigenen Lieferanten an. In diesem Fall ist der Unterschlüssel PortSupplier nicht vorhanden.

Portanbieter

Nachfolgend sehen Sie die Organisation der Metriken des Portanbieters in der Registrierung. PortSupplier ist der metrische Typname für einen Portlieferanten und entspricht [Metriktyp].

PortSupplier\

[Port supplier guid]\

CLSID = [Klassen-GUID]

[Metrik] = [metrischer Wert]

[Metrik] = [metrischer Wert]

Platzhalter Beschreibung
[Port supplier guid] Die GUID des Portanbieters
[Klassen-GUID] Die GUID der Klasse, die diesen Portanbieter implementiert

Symbolanbieter

Nachfolgend sehen Sie die Organisation der Symbol-Lieferantenmetriken in der Registrierung. SymbolProvider ist der Metriktypname für den Symbolanbieter und entspricht [Metriktyp].

SymbolProvider\

[Symbolanbieter-GUID]\

file\

CLSID = [Klassen-GUID]

[Metrik] = [metrischer Wert]

[Metrik] = [metrischer Wert]

metadata\

CLSID = [Klassen-GUID]

[Metrik] = [metrischer Wert]

[Metrik] = [metrischer Wert]

Platzhalter Beschreibung
[Symbolanbieter-GUID] Die GUID des Symbolanbieters
[Klassen-GUID] Die GUID der Klasse, die diesen Symbolanbieter implementiert

Ausdrucksauswerter

Es folgt die Organisation der Metriken des Ausdrucks evaluator in der Registrierung. ExpressionEvaluator ist der metrische Typname für den Ausdrucksauswerter und entspricht [metrischer Typ].

Hinweis

Der metrische Typ ist ExpressionEvaluator in dbgmetric.h nicht definiert, da davon ausgegangen wird, dass alle Metrikänderungen für Ausdrucksauswerter die entsprechenden Auswertungsfunktionen des Ausdrucks durchlaufen (das Layout des ExpressionEvaluator Unterschlüssels ist etwas kompliziert, sodass die Details in dbgmetric.lib ausgeblendet werden).

ExpressionEvaluator\

[Sprach-GUID]\

[Anbieter-GUID]\

CLSID = [Klassen-GUID]

[Metrik] = [metrischer Wert]

[Metrik] = [metrischer Wert]

Engine\

0 = [debug engine guid]

1 = [debug engine guid]

Platzhalter Beschreibung
[Sprach-GUID] Die GUID einer Sprache
[Anbieter-GUID] Die GUID eines Anbieters
[Klassen-GUID] Die GUID der Klasse, die diesen Ausdrucksauswerter implementiert
[debug engine guid] Die GUID eines Debugmoduls, mit dem dieser Ausdrucksauswerter arbeitet

Ausdrucksauswertungserweiterungen

Nachfolgend sehen Sie die Organisation der Metriken der Ausdruckserweiterungserweiterungen in der Registrierung. EEExtensions ist der metrische Typname für die Ausdrucksauswertungserweiterungen und entspricht [metrischer Typ].

EEExtensions\

[Erweiterungs-GUID]\

[Metrik] = [metrischer Wert]

[Metrik] = [metrischer Wert]

Platzhalter Beschreibung
[Erweiterungs-GUID] Die GUID einer Ausdrucksauswertungserweiterung

Ausnahmen

Es folgt die Organisation der Ausnahmenmetriken in der Registrierung. Exception ist der metrische Typname für die Ausnahmen und entspricht [Metriktyp].

Exception\

[debug engine guid]\

[Ausnahmetypen]\

[Ausnahme]\

[Metrik] = [metrischer Wert]

[Metrik] = [metrischer Wert]

[Ausnahme]\

[Metrik] = [metrischer Wert]

[Metrik] = [metrischer Wert]

Platzhalter Beschreibung
[debug engine guid] Die GUID eines Debugmoduls, das Ausnahmen unterstützt.
[Ausnahmetypen] Ein allgemeiner Titel für den Unterschlüssel, der die Klasse der Ausnahmen identifiziert, die behandelt werden können. Typische Namen sind C++-Ausnahmen, Win32-Ausnahmen, Common Language Runtime-Ausnahmen und systemeigene Laufzeitprüfungen. Diese Namen werden auch verwendet, um eine bestimmte Ausnahmeklasse für den Benutzer zu identifizieren.
[Ausnahme] Ein Name für eine Ausnahme: z. B. _com_error oder Control-Break. Diese Namen werden auch verwendet, um eine bestimmte Ausnahme für den Benutzer zu identifizieren.

Anforderungen

Diese Dateien befinden sich im Microsoft Visual Studio 2010 SDK-Installationsverzeichnis (standardmäßig [laufwerk]\Programme\Microsoft Visual Studio 2010 SDK\).

Header: includes\dbgmetric.h

Bibliothek: libs\ad2de.lib, libs\dbgmetric.lib

Siehe auch