Pomocnicy zestawu SDK do debugowania
Te funkcje i deklaracje to globalne funkcje pomocnicze do implementowania aparatów debugowania, ewaluatorów wyrażeń i dostawców symboli w języku C++.
Uwaga
Obecnie nie ma zarządzanych wersji tych funkcji i deklaracji.
Aby aparaty debugowania, ewaluatory wyrażeń i dostawcy symboli były używane przez program Visual Studio, muszą być zarejestrowane. Można to zrobić, ustawiając podklucze i wpisy rejestru, inaczej nazywane "ustawianiem metryk". Następujące funkcje globalne zostały zaprojektowane w celu ułatwienia procesu aktualizowania tych metryk. Zobacz sekcję dotyczącą lokalizacji rejestru, aby dowiedzieć się, jak układ każdego podklucza rejestru jest aktualizowany przez te funkcje.
Ogólne funkcje metryk
Są to ogólne funkcje używane przez aparaty debugowania. Wyspecjalizowane funkcje dla ewaluatorów wyrażeń i dostawców symboli są szczegółowo opisane w dalszej części.
GetMetric, metoda
Pobiera wartość metryki z rejestru.
HRESULT GetMetric(
LPCWSTR pszMachine,
LPCWSTR pszType,
REFGUID guidSection,
LPCWSTR pszMetric,
DWORD * pdwValue,
LPCWSTR pszAltRoot
);
Parametr | Opis |
---|---|
pszMachine | [in] Nazwa maszyny zdalnej, której rejestr zostanie zapisany (NULL oznacza maszynę lokalną). |
pszType | [in] Jeden z typów metryk. |
guidSection | [in] Identyfikator GUID określonego aparatu, ewaluatora, wyjątku itp. Określa podsekcję pod typem metryki dla określonego elementu. |
pszMetric | [in] Metryka do uzyskania. Odpowiada to określonej nazwie wartości. |
pdwValue | [in] Lokalizacja magazynu wartości z metryki. Istnieje kilka odmian getmetric, które mogą zwrócić DWORD (jak w tym przykładzie), BSTR, identyfikator GUID lub tablicę identyfikatorów GUID. |
pszAltRoot | [in] Alternatywny katalog główny rejestru do użycia. Ustaw wartość na , aby NULL użyć wartości domyślnej. |
SetMetric, metoda
Ustawia określoną wartość metryki w rejestrze.
HRESULT SetMetric(
LPCWSTR pszType,
REFGUID guidSection,
LPCWSTR pszMetric,
const DWORD dwValue,
bool fUserSpecific,
LPCWSTR pszAltRoot
);
Parametr | Opis |
---|---|
pszType | [in] Jeden z typów metryk. |
guidSection | [in] Identyfikator GUID określonego aparatu, ewaluatora, wyjątku itp. Określa podsekcję pod typem metryki dla określonego elementu. |
pszMetric | [in] Metryka do uzyskania. Odpowiada to określonej nazwie wartości. |
dwValue | [in] Lokalizacja magazynu wartości w metryce. Istnieje kilka odmian setmetric, które mogą przechowywać DWORD (w tym przykładzie), BSTR, identyfikator GUID lub tablicę identyfikatorów GUID. |
fUserSpecific | [in] Wartość TRUE, jeśli metryka jest specyficzna dla użytkownika i jeśli powinna zostać zapisana w gałęzi użytkownika zamiast gałęzi komputera lokalnego. |
pszAltRoot | [in] Alternatywny katalog główny rejestru do użycia. Ustaw wartość na , aby NULL użyć wartości domyślnej. |
RemoveMetric, metoda
Usuwa metryki z rejestru.
HRESULT RemoveMetric(
LPCWSTR pszType,
REFGUID guidSection,
LPCWSTR pszMetric,
LPCWSTR pszAltRoot
);
Parametr | Opis |
---|---|
pszType | [in] Jeden z typów metryk. |
guidSection | [in] Identyfikator GUID określonego aparatu, ewaluatora, wyjątku itp. Określa podsekcję pod typem metryki dla określonego elementu. |
pszMetric | [in] Metryka do usunięcia. Odpowiada to określonej nazwie wartości. |
pszAltRoot | [in] Alternatywny katalog główny rejestru do użycia. Ustaw wartość na , aby NULL użyć wartości domyślnej. |
EnumMetricSections, metoda
Wylicza różne sekcje metryk w rejestrze.
HRESULT EnumMetricSections(
LPCWSTR pszMachine,
LPCWSTR pszType,
GUID * rgguidSections,
DWORD * pdwSize,
LPCWSTR pszAltRoot
);
Parametr | Opis |
---|---|
pszMachine | [in] Nazwa maszyny zdalnej, której rejestr zostanie zapisany (NULL oznacza maszynę lokalną). |
pszType | [in] Jeden z typów metryk. |
rgguidSections | [in, out] Wstępnie alokowana tablica identyfikatorów GUID do wypełnienia. |
pdwSize | [in] Maksymalna liczba identyfikatorów GUID, które można przechowywać w tablicy rgguidSections . |
pszAltRoot | [in] Alternatywny katalog główny rejestru do użycia. Ustaw wartość na , aby NULL użyć wartości domyślnej. |
Funkcje ewaluatora wyrażeń
Function | opis |
---|---|
GetEEMetric | Pobiera wartość metryki z rejestru. |
SetEEMetric | Ustawia określoną wartość metryki w rejestrze. |
RemoveEEMetric | Usuwa metryki z rejestru. |
GetEEMetricFile | Pobiera nazwę pliku z określonej metryki i ładuje ją, zwracając zawartość pliku jako ciąg. |
Funkcje wyjątków
Function | opis |
---|---|
GetExceptionMetric | Pobiera wartość metryki z rejestru. |
SetExceptionMetric | Ustawia określoną wartość metryki w rejestrze. |
RemoveExceptionMetric | Usuwa metryki z rejestru. |
RemoveAllExceptionMetrics | Usuwa wszystkie metryki wyjątków z rejestru. |
Funkcje dostawcy symboli
Function | opis |
---|---|
GetSPMetric | Pobiera wartość metryki z rejestru. |
SetSPMetric | Ustawia określoną wartość metryki w rejestrze. |
RemoveSPMetric | Usuwa metryki z rejestru. |
Funkcje wyliczenia
Function | opis |
---|---|
EnumMetricSections | Wylicza wszystkie metryki dla określonego typu metryki. |
EnumDebugEngine | Wylicza zarejestrowane aparaty debugowania. |
EnumEEs | Wylicza zarejestrowanych ewaluatorów wyrażeń. |
EnumExceptionMetrics | Wylicza wszystkie metryki wyjątków. |
Definicje metryk
Te definicje mogą służyć do wstępnie zdefiniowanych nazw metryk. Nazwy odpowiadają różnym kluczom rejestru i nazwom wartości i są definiowane jako ciągi znaków szerokich: na przykład extern LPCWSTR metrictypeEngine
.
Wstępnie zdefiniowane typy metryk | Opis: Klucz podstawowy dla.... |
---|---|
metrictypeEngine | Wszystkie metryki aparatu debugowania. |
metrictypePortSupplier | Wszystkie metryki dostawcy portów. |
metrictypeException | Wszystkie metryki wyjątków. |
metricttypeEEExtension | Wszystkie rozszerzenia ewaluatora wyrażeń. |
Właściwości aparatu debugowania | opis |
---|---|
metricAddressBP | Ustaw wartość nonzero, aby wskazać obsługę punktów przerwania adresów. |
metricAlwaysLoadLocal | Ustaw wartość nonzero, aby zawsze ładować aparat debugowania lokalnie. |
metricLoadInDebuggeeSession | NIEUŻYWANE |
metricLoadedByDebuggee | Ustaw wartość nonzero, aby wskazać, że aparat debugowania będzie zawsze ładowany z debugowaniem lub przez debugowany program. |
metricAttach | Ustaw wartość nonzero, aby wskazać obsługę załącznika do istniejących programów. |
metricCallStackBP | Ustaw wartość nonzero, aby wskazać obsługę punktów przerwania stosu wywołań. |
metricConditionalBP | Ustaw wartość nonzero, aby wskazać obsługę ustawienia warunkowych punktów przerwania. |
metricDataBP | Ustaw wartość nonzero, aby wskazać obsługę ustawienia punktów przerwania dla zmian w danych. |
metricDisassembly | Ustaw wartość nonzero, aby wskazać obsługę produkcji listy dezasemblacji. |
metricDumpWriting | Ustaw wartość nonzero, aby wskazać obsługę zapisywania zrzutu (zrzut pamięci do urządzenia wyjściowego). |
metrykaENC | Ustaw wartość nonzero, aby wskazać obsługę opcji Edytuj i Kontynuuj. Uwaga: niestandardowy aparat debugowania nigdy nie powinien ustawiać tego ustawienia lub zawsze powinien ustawić go na 0. |
metricExceptions | Ustaw wartość nonzero, aby wskazać obsługę wyjątków. |
metricFunctionBP | Ustaw wartość nonzero, aby wskazać obsługę nazwanych punktów przerwania (punkty przerwania, które przerywają działanie po wywołaniu określonej nazwy funkcji). |
metricHitCountBP | Ustaw wartość nonzero, aby wskazać obsługę ustawienia punktów przerwania "punkt trafienia" (punkty przerwania, które są wyzwalane tylko po osiągnięciu określonej liczby razy). |
metricJITDebug | Ustaw wartość nonzero, aby wskazać obsługę debugowania just in time (debuger jest uruchamiany, gdy wyjątek występuje w uruchomionym procesie). |
metricMemory | NIEUŻYWANE |
metricPortSupplier | Ustaw wartość parametru CLSID dostawcy portów, jeśli jest wdrożony. |
metricRegisters | NIEUŻYWANE |
metricSetNextStatement | Ustaw wartość nonzero, aby wskazać obsługę ustawienia następnej instrukcji (która pomija wykonywanie instrukcji pośrednich). |
metricSuspendThread | Ustaw wartość nonzero, aby wskazać obsługę wstrzymania wykonywania wątku. |
metricWarnIfNoSymbols | Ustaw wartość nonzero, aby wskazać, że użytkownik powinien być powiadamiany, jeśli nie ma żadnych symboli. |
metricProgramProvider | Ustaw tę wartość na clSID dostawcy programu. |
metricAlwaysLoadProgramProviderLocal | Ustaw tę wartość na wartość nonzero, aby wskazać, że dostawca programu powinien być zawsze ładowany lokalnie. |
metricEngineCanWatchProcess | Ustaw tę wartość na wartość nonzero, aby wskazać, że aparat debugowania będzie obserwować zdarzenia procesu zamiast dostawcy programu. |
metricRemoteDebugging | Ustaw tę wartość na wartość nonzero, aby wskazać obsługę zdalnego debugowania. |
metricEncUseNativeBuilder | Ustaw tę wartość na wartość nonzero, aby wskazać, że Menedżer edycji i kontynuowania powinien używać biblioteki encbuild.dll aparatu debugowania do kompilacji na potrzeby edycji i kontynuowania. Uwaga: niestandardowy aparat debugowania nigdy nie powinien ustawiać tego ustawienia lub zawsze powinien ustawić go na 0. |
metricLoadUnderWOW64 | Ustaw tę wartość na wartość nonzero, aby wskazać, że aparat debugowania powinien zostać załadowany w procesie debugowania w obszarze WOW podczas debugowania procesu 64-bitowego; W przeciwnym razie aparat debugowania zostanie załadowany w procesie programu Visual Studio (uruchomionym w obszarze WOW64). |
metricLoadProgramProviderUnderWOW64 | Ustaw tę wartość na wartość niezerową, aby wskazać, że dostawca programu powinien zostać załadowany w procesie debugowania podczas debugowania procesu 64-bitowego w obszarze WOW; w przeciwnym razie zostanie załadowany w procesie programu Visual Studio. |
metricStopOnExceptionCrossingManagedBoundary | Ustaw tę wartość na wartość nonzero, aby wskazać, że proces powinien zostać zatrzymany, jeśli nieobsługiwany wyjątek zostanie zgłoszony przez granice kodu zarządzanego/niezarządzanego. |
metricAutoSelectPriority | Ustaw ten priorytet na automatyczny wybór aparatu debugowania (wyższe wartości są równe wyższym priorytetowi). |
metricAutoSelectIncompatibleList | Klucz rejestru zawierający wpisy, które określają identyfikatory GUID dla aparatów debugowania, które mają być ignorowane w automatycznym zaznaczeniu. Te wpisy są liczbą (0, 1, 2 itd.) z identyfikatorem GUID wyrażonym jako ciąg. |
metricIncompatibleList | Klucz rejestru zawierający wpisy określające identyfikatory GUID dla aparatów debugowania, które są niezgodne z tym aparatem debugowania. |
metricDisableJITOptimization | Ustaw tę wartość na wartość nonzero, aby wskazać, że optymalizacje just in time (dla kodu zarządzanego) powinny być wyłączone podczas debugowania. |
Właściwości ewaluatora wyrażeń | opis |
---|---|
metricEngine | Obejmuje to liczbę aparatów debugowania, które obsługują określonego ewaluatora wyrażeń. |
metricPreloadModules | Ustaw tę wartość na wartość nonzero, aby wskazać, że moduły powinny zostać wstępnie załadowane po uruchomieniu ewaluatora wyrażeń względem programu. |
metricThisObjectName | Ustaw tę wartość na nazwę obiektu "this". |
Właściwości rozszerzenia ewaluatora wyrażeń | opis |
---|---|
metricExtensionDll | Nazwa biblioteki DLL, która obsługuje to rozszerzenie. |
metricExtensionRegistersSupported | Lista obsługiwanych rejestrów. |
metricExtensionRegistersEntryPoint | Punkt wejścia na potrzeby uzyskiwania dostępu do rejestrów. |
metricExtensionTypesSupported | Lista obsługiwanych typów. |
metricExtensionTypesEntryPoint | Punkt wejścia na potrzeby uzyskiwania dostępu do typów. |
Właściwości dostawcy portów | opis |
---|---|
metricPortPickerCLSID | Identyfikator CLSID selektora portów (okno dialogowe, za pomocą których użytkownik może wybrać porty i dodać porty do użycia do debugowania). |
metricDisallowUserEnteredPorts | Niezero, jeśli nie można dodać portów wprowadzonych przez użytkownika do dostawcy portów (powoduje to, że okno dialogowe selektora portów jest zasadniczo tylko do odczytu). |
metricPidBase | Podstawowy identyfikator procesu używany przez dostawcę portów podczas przydzielania identyfikatorów procesów. |
Wstępnie zdefiniowane typy magazynów SP | opis |
---|---|
storetypeFile | Symbole są przechowywane w osobnym pliku. |
storetypeMetadata | Symbole są przechowywane jako metadane w zestawie. |
Różne właściwości | opis |
---|---|
metricShowNonUserCode | Ustaw tę wartość na wartość nonzero, aby wyświetlić kod nieużytkownika. |
metricJustMyCodeStepping | Ustaw tę wartość na wartość nonzero, aby wskazać, że kroki mogą wystąpić tylko w kodzie użytkownika. |
metricCLSID | CLSID dla obiektu określonego typu metryki. |
metricName | Przyjazna dla użytkownika nazwa obiektu określonego typu metryki. |
metricLanguage | Nazwa języka. |
Lokalizacje rejestru
Metryki są odczytywane i zapisywane w rejestrze, w szczególności w podkluczu VisualStudio
.
Uwaga
W większości przypadków metryki zostaną zapisane w kluczu HKEY_LOCAL_MACHINE. Jednak czasami HKEY_CURRENT_USER będzie kluczem docelowym. Plik Dbgmetric.lib obsługuje oba klucze. Podczas pobierania metryki najpierw wyszukuje HKEY_CURRENT_USER, a następnie HKEY_LOCAL_MACHINE. Podczas ustawiania metryki parametr określa klucz najwyższego poziomu do użycia.
[klucz rejestru]\
Software
\
Microsoft
\
VisualStudio
\
[wersja główna]\
[katalog główny metryki]\
[typ metryki]\
[metryka] = [wartość metryki]
[metryka] = [wartość metryki]
[metryka] = [wartość metryki]
Symbol zastępczy | opis |
---|---|
[klucz rejestru] | Usługa HKEY_CURRENT_USER lub HKEY_LOCAL_MACHINE . |
[wersja główna] | Wersja programu Visual Studio (na przykład , 7.0 , 7.1 lub 8.0 ). Ten katalog główny można jednak również zmodyfikować za pomocą przełącznika /rootsuffix w pliku devenv.exe. W przypadku programu VSIP ten modyfikator jest zazwyczaj exp, więc katalog główny wersji to na przykład 8.0Exp. |
[katalog główny metryki] | Jest to wartość AD7Metrics lub AD7Metrics(Debug) , w zależności od tego, czy używana jest wersja debugowania dbgmetric.lib. Uwaga: Niezależnie od tego, czy jest używana biblioteka dbgmetric.lib, ta konwencja nazewnictwa powinna być zgodna, jeśli masz różnice między wersjami debugowania i wydania, które muszą zostać odzwierciedlone w rejestrze. |
[typ metryki] | Typ metryki do zapisania: Engine , ExpressionEvaluator , SymbolProvider itp. Są one zdefiniowane jako w dbgmetric.h jako metricTypeXXXX , gdzie XXXX jest określoną nazwą typu. |
[metryka] | Nazwa wpisu, który ma zostać przypisany do wartości w celu ustawienia metryki. Rzeczywista organizacja metryk zależy od typu metryki. |
[wartość metryki] | Wartość przypisana do metryki. Typ wartości powinien mieć wartość (ciąg, liczba itp.) zależy od metryki. |
Uwaga
Wszystkie identyfikatory GUID są przechowywane w formacie {GUID}
. Na przykład {123D150B-FA18-461C-B218-45B3E4589F9B}
.
Aparaty debugowania
Poniżej przedstawiono organizację metryk aparatów debugowania w rejestrze. Engine
to nazwa typu metryki aparatu debugowania i odpowiada [typowi metryki] w powyższym poddrzewie rejestru.
Engine
\
[identyfikator GUID aparatu]\
CLSID
= [identyfikator GUID klasy]
[metryka] = [wartość metryki]
[metryka] = [wartość metryki]
[metryka] = [wartość metryki]
PortSupplier
\
0
= [identyfikator GUID dostawcy portów]
1
= [identyfikator GUID dostawcy portów]
Symbol zastępczy | opis |
---|---|
[identyfikator GUID aparatu] | Identyfikator GUID aparatu debugowania. |
[identyfikator GUID klasy] | Identyfikator GUID klasy, która implementuje ten aparat debugowania. |
[identyfikator GUID dostawcy portów] | Identyfikator GUID dostawcy portów, jeśli istnieje. Wiele aparatów debugowania używa domyślnego dostawcy portów i dlatego nie określa własnego dostawcy. W takim przypadku podklucz PortSupplier będzie nieobecny. |
Dostawcy portów
Poniżej przedstawiono organizację metryk dostawcy portów w rejestrze. PortSupplier
to nazwa typu metryki dostawcy portów i odpowiada [typowi metryki].
PortSupplier
\
[identyfikator GUID dostawcy portów]\
CLSID
= [identyfikator GUID klasy]
[metryka] = [wartość metryki]
[metryka] = [wartość metryki]
Symbol zastępczy | opis |
---|---|
[identyfikator GUID dostawcy portów] | Identyfikator GUID dostawcy portów |
[identyfikator GUID klasy] | Identyfikator GUID klasy implementujący tego dostawcę portów |
Dostawcy symboli
Poniżej przedstawiono organizację metryk dostawcy symboli w rejestrze. SymbolProvider
to nazwa typu metryki dostawcy symboli i odpowiada [typowi metryki].
SymbolProvider
\
[identyfikator GUID dostawcy symboli]\
file
\
CLSID
= [identyfikator GUID klasy]
[metryka] = [wartość metryki]
[metryka] = [wartość metryki]
metadata
\
CLSID
= [identyfikator GUID klasy]
[metryka] = [wartość metryki]
[metryka] = [wartość metryki]
Symbol zastępczy | opis |
---|---|
[identyfikator GUID dostawcy symboli] | Identyfikator GUID dostawcy symboli |
[identyfikator GUID klasy] | Identyfikator GUID klasy implementujący tego dostawcę symboli |
Ewaluatory wyrażeń
Poniżej przedstawiono organizację metryk ewaluatora wyrażeń w rejestrze. ExpressionEvaluator
to nazwa typu metryki dla ewaluatora wyrażeń i odpowiada [typowi metryki].
Uwaga
Typ metryki dla ExpressionEvaluator
elementu nie jest zdefiniowany w pliku dbgmetric.h, ponieważ zakłada się, że wszystkie zmiany metryk dla ewaluatorów wyrażeń będą przechodzić przez odpowiednie funkcje metryki ewaluatora wyrażeń (układ ExpressionEvaluator
podklucza jest nieco skomplikowany, więc szczegóły są ukryte wewnątrz dbgmetric.lib).
ExpressionEvaluator
\
[identyfikator GUID języka]\
[identyfikator GUID dostawcy]\
CLSID
= [identyfikator GUID klasy]
[metryka] = [wartość metryki]
[metryka] = [wartość metryki]
Engine
\
0
= [identyfikator GUID aparatu debugowania]
1
= [identyfikator GUID aparatu debugowania]
Symbol zastępczy | opis |
---|---|
[identyfikator GUID języka] | Identyfikator GUID języka |
[identyfikator GUID dostawcy] | Identyfikator GUID dostawcy |
[identyfikator GUID klasy] | Identyfikator GUID klasy implementujący ten ewaluator wyrażeń |
[identyfikator GUID aparatu debugowania] | Identyfikator GUID aparatu debugowania współdziałający z tym ewaluatorem wyrażeń |
Rozszerzenia ewaluatora wyrażeń
Poniżej przedstawiono organizację metryk rozszerzenia ewaluatora wyrażeń w rejestrze. EEExtensions
to nazwa typu metryki dla rozszerzeń ewaluatora wyrażeń i odpowiada [typowi metryki].
EEExtensions
\
[extension guid]\
[metryka] = [wartość metryki]
[metryka] = [wartość metryki]
Symbol zastępczy | opis |
---|---|
[extension guid] | Identyfikator GUID rozszerzenia ewaluatora wyrażeń |
Wyjątki
Poniżej przedstawiono organizację metryk wyjątków w rejestrze. Exception
to nazwa typu metryki dla wyjątków i odpowiada [typowi metryki].
Exception
\
[identyfikator GUID aparatu debugowania]\
[typy wyjątków]\
[wyjątek]\
[metryka] = [wartość metryki]
[metryka] = [wartość metryki]
[wyjątek]\
[metryka] = [wartość metryki]
[metryka] = [wartość metryki]
Symbol zastępczy | opis |
---|---|
[identyfikator GUID aparatu debugowania] | Identyfikator GUID aparatu debugowania, który obsługuje wyjątki. |
[typy wyjątków] | Ogólny tytuł podklucza identyfikujący klasę wyjątków, które można obsłużyć. Typowe nazwy to wyjątki języka C++, wyjątki Win32, wyjątki środowiska uruchomieniowego języka wspólnego i natywne testy czasu wykonywania. Te nazwy są również używane do identyfikowania konkretnej klasy wyjątku dla użytkownika. |
[wyjątek] | Nazwa wyjątku: na przykład _com_error lub Break-Break. Te nazwy są również używane do identyfikowania określonego wyjątku dla użytkownika. |
Wymagania
Te pliki znajdują się w katalogu instalacyjnym zestawu SDK programu Microsoft Visual Studio 2010 (domyślnie [dysk]\Program Files\Microsoft Visual Studio 2010 SDK\).
Nagłówek: includes\dbgmetric.h
Biblioteka: libs\ad2de.lib, libs\dbgmetric.lib