Specyfikatory formatu dla języka C++ w debugerze programu Visual Studio
Można zmienić format, w którym wartość jest wyświetlana w oknach Watch, Autos i Locals , używając specyfikatorów formatu.
Specyfikatory formatu można również używać w oknie Natychmiastowy , w oknie Polecenia , w punktach śledzenia, a nawet w oknach źródłowych. Jeśli wstrzymasz wyrażenie w tych oknach, wynik pojawi się w etykietce danych. Wyświetlanie etykietki danych odzwierciedla specyfikator formatu.
Uwaga
Gdy debuger natywny programu Visual Studio zmienił się na nowy aparat debugowania, dodano niektóre nowe specyfikatory formatu i usunięto niektóre stare. Starszy debuger jest nadal używany podczas międzyoperacyjnej (mieszanej natywnej i zarządzanej) debugowania za pomocą języka C++/CLI.
Ustawianie specyfikatorów formatu
Użyjemy następującego przykładowego kodu:
int main() {
int my_var1 = 0x0065;
int my_var2 = 0x0066;
int my_var3 = 0x0067;
}
Dodaj zmienną my_var1
do okna Obserwowanie podczas debugowania, Debuguj >zegarek Windows>Watch>1. Następnie kliknij prawym przyciskiem myszy zmienną i wybierz pozycję Wyświetlacz szesnastkowy. Teraz w oknie Obserwowanie jest wyświetlana wartość 0x0065. Aby wyświetlić tę wartość wyrażoną jako znak, a nie liczbę całkowitą, najpierw kliknij prawym przyciskiem myszy i usuń zaznaczenie opcji Wyświetlanie szesnastkowe. Następnie dodaj specyfikator formatu znaków , c w kolumnie Nazwa po nazwie zmiennej. W kolumnie Wartość jest teraz wyświetlana wartość 101 "e".
Możesz wyświetlić i wybrać z listy dostępnych specyfikatorów formatu, dołączając przecinek (,) do wartości w oknie Obserwowanie .
Specyfikatory formatu
W poniższych tabelach opisano specyfikatory formatu, których można użyć w programie Visual Studio. Specyfikatory pogrubione są obsługiwane tylko dla nowego debugera, a nie debugowania międzyoperacyjnego za pomocą języka C++/CLI.
Specyfikator | Formatuj | Oryginalna wartość zegarka | Wyświetlona wartość |
---|---|---|---|
d | liczba całkowita dziesiętna | 0x00000066 | 102 |
o | niepodpisane ósemkowe liczby całkowite | 0x00000066 | 000000000146 |
x h |
liczba całkowita szesnastkowa | 102 | 0xcccccccc |
X H |
liczba całkowita szesnastkowa | 102 | 0xCCCCCCCC |
Xb Hb |
liczba całkowita szesnastkowa (bez wiodącej liczby 0x) | 102 | cccccccc |
Xb Hb |
liczba całkowita szesnastkowa (bez wiodącej liczby 0x) | 102 | CCCCCCCC |
b | liczba całkowita binarna bez znaku | 25 | 0b0000000000000000000000000000011 |
Bb | liczba całkowita binarna bez znaku wiodącego 0b | 25 | 00000000000000000000000000011001 |
e | zapis naukowy | 25000000 | 2.500000e+07 |
g | krótsze wartości naukowe lub zmiennoprzecinkowe | 25000000 | 2.5e+07 |
c | pojedynczy znak | 0x0065 | 101 "e" |
s | ciąg const char* (z cudzysłowami) | <lokalizacja> "hello world" | "hello world" |
sb | ciąg const char* (bez znaków cudzysłowu) | <lokalizacja> "hello world" | Cześć ludzie |
s8 | Ciąg UTF-8 | <lokalizacja> "To jest filiżanka kawy UTF-8 â ̃•" | "To jest filiżanka ☕ kawy UTF-8 " |
s8b | Ciąg UTF-8 (bez cudzysłowów) | <lokalizacja> "hello world" | Cześć ludzie |
Su | Ciąg Unicode (kodowanie UTF-16) (z cudzysłowami) | <lokalizacja> L"hello world" | L"hello world" u"hello world" |
sub | Ciąg Unicode (kodowanie UTF-16) (bez cudzysłowów) | <lokalizacja> L"hello world" | Cześć ludzie |
bstr | Ciąg binarny BSTR (ze znakami cudzysłowu) | <lokalizacja> L"hello world" | L"hello world" |
Env | Blok środowiska (ciąg zakończony o podwójnej wartości null) | <location> L"=::=::\" | L"=::=::\\\0=C:=C:\\windows\\system32\0ALLUSERSPROFILE=... |
s32 | Ciąg UTF-32 (ze znakami cudzysłowu) | <location> U"hello world" | U"hello world" |
s32b | Ciąg UTF-32 (bez znaków cudzysłowu) | <location> U"hello world" | Cześć ludzie |
En | wyliczenie | Sobota (6) | Sobota |
Hv | Typ wskaźnika — wskazuje, że sprawdzana wartość wskaźnika jest wynikiem alokacji sterty tablicy, na przykład new int[3] . |
<location>{<first member>} | <location>{<first member, <second member>>, ...} |
Na | Pomija adres pamięci wskaźnika do obiektu. | <location>, {member=value...} | {member=value...} |
Nd | Wyświetla tylko informacje o klasie bazowej, ignorując klasy pochodne | (Shape*) square zawiera informacje o klasie bazowej i klasie pochodnej |
Wyświetla tylko informacje o klasie bazowej |
godz. | HRESULT lub Win32 kod błędu. Ten specyfikator nie jest już potrzebny dla HRESULTs, ponieważ debuger dekoduje je automatycznie. | S_OK | S_OK |
wc | Flaga klasy okna | 0x0010 | WC_DEFAULTCHAR |
Wm | Numery komunikatów systemu Windows | 16 | WM_CLOSE |
nr | Pomijanie elementu "Widok pierwotny" | ||
nvo | Pokaż element "Widok pierwotny" tylko dla wartości liczbowych | ||
! | format pierwotny, ignorując dostosowania widoków typów danych | <niestandardowa reprezentacja> | 100 |
Obsługi | Wyświetla informacje o dojściu win32 | 0x000000000000009c | Wyświetla przydatne informacje o obsłudze, takiej jak identyfikator wątku itp. |
Uwaga
Gdy specyfikator formatu hv jest obecny, debuger próbuje określić długość buforu i wyświetlić liczbę elementów. Ponieważ debuger nie zawsze jest możliwy do znalezienia dokładnego rozmiaru buforu tablicy, należy użyć specyfikatora (pBuffer,[bufferSize])
rozmiaru, jeśli to możliwe. Specyfikator formatu hv jest przydatny, gdy rozmiar buforu nie jest łatwo dostępny.
Specyfikatory rozmiaru wskaźników jako tablic
Jeśli masz wskaźnik do obiektu, który chcesz wyświetlić jako tablicę, możesz użyć liczby całkowitej lub wyrażenia, aby określić liczbę elementów tablicy.
Specyfikator | Formatuj | Oryginalna wartość zegarka | Wyświetlona wartość |
---|---|---|---|
n | Liczba całkowita dziesiętna lub szesnastkowa | pBuffer,[32] pBuffer,[0x20] |
Wyświetla pBuffer jako tablicę elementów 32. |
[exp] | Prawidłowe wyrażenie języka C++, które daje w wyniku liczbę całkowitą. | pBuffer,[bufferSize] | Wyświetla wartość pBuffer jako tablicę bufferSize elementów. |
expand(n) | Prawidłowe wyrażenie języka C++, które daje w wyniku liczbę całkowitą | pBuffer, expand(2) | Wyświetla trzeci element elementu pBuffer |
Specyfikatory formatu na potrzeby debugowania międzyoperacyjnego za pomocą języka C++/interfejsu wiersza polecenia
Specyfikator | Formatuj | Oryginalna wartość zegarka | Wyświetlona wartość |
---|---|---|---|
o | niepodpisane ósemkowe liczby całkowite | 0xF065 | 0170145 |
x X |
Liczba całkowita szesnastkowa | 61541 | 0x0000f065 |
c | pojedynczy znak | <location> | 101 "e" |
s | const char* (z cudzysłowami) | <location> | "hello world" |
Su | const wchar_t* const char16_t* (z cudzysłowami) |
<location> | L"hello world" |
sub | const wchar_t* const char16_t* |
<location> | Cześć ludzie |
s8 | const char* (z cudzysłowami) | <location> | "hello world" |
godz. | HRESULT lub Win32 kod błędu. Ten specyfikator nie jest już potrzebny dla HRESULTs, ponieważ debuger dekoduje je automatycznie. |
S_OK | S_OK |
wc | Flaga klasy okna | 0x00000040, | WC_DEFAULTCHAR |
Wm | Numery komunikatów systemu Windows | 0x0010 | WM_CLOSE |
! | format pierwotny, ignorując dostosowania widoku typu danych | <niestandardowa reprezentacja> | 100 |
D, e, f, g, h, i, l, m, ma, mb, md, mq, mu, mw i specyfikatory kodu natywnego i C++/CLI wymagały starszego debugera, który nie jest obsługiwany w programie Visual Studio 2022 lub nowszych wersjach.
Specyfikatory pogrubione są obsługiwane tylko w przypadku debugowania kodu natywnego i C++/CLI. Te specyfikatory wymagają starszego debugera określonego przy użyciu trybu zgodności zarządzanej.
Specyfikator | Formatuj | Oryginalna wartość zegarka | Wyświetlona wartość |
---|---|---|---|
d i |
liczba całkowita ze znakiem dziesiętna | 0xF000F065 | -268373915 |
U | liczba całkowita bez znaku dziesiętnego | 0x0065 | 101 |
o | niepodpisane ósemkowe liczby całkowite | 0xF065 | 0170145 |
x X |
Liczba całkowita szesnastkowa | 61541 | 0x0000f065 |
l h |
długi lub krótki prefiks dla: d, i, u, o, x, X | 00406042 | 0x0c22 |
f | ze znakiem zmiennoprzecinkowa | (3./2.), f | 1.500000 |
e | podpisana notacja naukowa | (3.0/2.0) | 1.500000e+000 |
g | podpisana zmiennoprzecinkowa lub podpisana notacja naukowa, w zależności od tego, która wartość jest krótsza |
(3.0/2.0) | 1.5 |
c | pojedynczy znak | <location> | 101 "e" |
s | const char* (z cudzysłowami) | <location> | "hello world" |
Su | const wchar_t* const char16_t* (z cudzysłowami) |
<location> | L"hello world" |
sub | const wchar_t* const char16_t* |
<location> | Cześć ludzie |
s8 | const char* (z cudzysłowami) | <location> | "hello world" |
godz. | HRESULT lub Win32 kod błędu. Ten specyfikator nie jest już potrzebny dla HRESULTs, ponieważ debuger dekoduje je automatycznie. |
S_OK | S_OK |
wc | Flaga klasy okna | 0x00000040, | WC_DEFAULTCHAR |
Wm | Numery komunikatów systemu Windows | 0x0010 | WM_CLOSE |
! | format pierwotny, ignorując dostosowania widoku typu danych | <niestandardowa reprezentacja> | 100 |
Specyfikatory formatu dla lokalizacji pamięci w debugowaniu międzyoperacyjnym za pomocą języka C++/interfejsu wiersza polecenia
W poniższej tabeli opisano symbole formatowania używane dla lokalizacji pamięci. Można użyć specyfikatora lokalizacji pamięci z dowolną wartością lub wyrażeniem, które daje w wyniku lokalizację.
Specyfikatory pogrubione są obsługiwane tylko w przypadku debugowania kodu natywnego i C++/CLI. Wymaga to starszego debugera określonego przy użyciu trybu zgodności zarządzanej.
Symbol | Formatuj | Oryginalna wartość zegarka | Wyświetlona wartość |
---|---|---|---|
ma | 64 znaki ASCII | 0x0012ffac | 0x0012ffac .4...0...". 0W&...... 1W&.0.:W.. 1....".. 1.JO&.1.2.".". 1...0y.... 1 |
m | 16 bajtów w szesnastkowym, a następnie 16 znaków ASCII | 0x0012ffac | 0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00.4...0...". 0W&.. |
Mb | 16 bajtów w szesnastkowym, a następnie 16 znaków ASCII | 0x0012ffac | 0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00.4...0...". 0W&.. |
Mw | 8 wyrazów | 0x0012ffac | 0x0012ffac 34B3 00CB 3084 8094 22FF 308A 2657 0000 |
Md | 4 doublewords | 0x0012ffac | 0x0012ffac 00CB34B3 80943084 308A22FF 00002657 |
Mq | 2 czworokąt | 0x0012ffac | 0x0012ffac 7ffdf000000000000 5f441a790012fdd4 |
mu | 2-bajtowe znaki (Unicode) | 0x0012ffac | 0x0012ffac 8478 77f4 ffff ffff 0000 0000 0000 0000 0000 |
Specyfikator rozmiaru wskaźników jako tablic w debugowaniu międzyoperacyjnym za pomocą języka C++/CLI
Jeśli masz wskaźnik do obiektu, który chcesz wyświetlić jako tablicę, możesz użyć liczby całkowitej, aby określić liczbę elementów tablicy.
Specyfikator | Formatuj | Expression | Wyświetlona wartość |
---|---|---|---|
n | Liczba całkowita dziesiętna | pBuffer[32] | Wyświetla pBuffer jako tablicę 32-elementową. |