Sdílet prostřednictvím


Specifikátory formátu pro jazyk C++ v ladicím programu sady Visual Studio

Pomocí specifikátorů formátu můžete změnit formát, ve kterém se hodnota zobrazuje v oknech Kukátku, Automatické hodnoty a Místní hodnoty.

Můžete také použít specifikátory formátu v okně Okamžité , Příkazové okno, v trasovacích bodech a dokonce i ve zdrojových oknech. Pokud se ve výrazu v těchto oknech pozastavíte, výsledek se zobrazí v datovém tipu. Zobrazování DataTip odráží specifikátor formátu.

Poznámka:

Když se nativní ladicí program sady Visual Studio změnil na nový ladicí modul, byly přidány některé specifikátory nového formátu a některé staré byly odebrány. Starší ladicí program se stále používá, když provádíte ladění v jazyce C++/CLI (smíšené nativní a spravované).

Nastavení specifikátorů formátu

Použijeme následující ukázkový kód:

int main() {
    int my_var1 = 0x0065;
    int my_var2 = 0x0066;
    int my_var3 = 0x0067;
}

Přidejte proměnnou my_var1 do okna Watch při ladění, Debug>Windows>Watch>Watch 1. Potom klikněte pravým tlačítkem myši na proměnnou a vyberte Šestnáctkové zobrazení. Teď okno Kukátko zobrazuje hodnotu 0x0065. Pokud chcete zobrazit tuto hodnotu vyjádřenou jako znak místo celého čísla, klikněte pravým tlačítkem myši a zrušte výběr šestnáctkového zobrazení. Potom přidejte specifikátor formátu znaku , c do sloupce Name za název proměnné. Sloupec Hodnota teď zobrazuje 101 "e".

Snímek obrazovky okna sledování Visual Studia s jedním vybraným řádkem, který zobrazuje my_var1.c s hodnotou 101 'e' a typem int.

Seznam dostupných specifikátorů formátu můžete zobrazit a vybrat tak, že k hodnotě okna Kukátko přidáte čárku (,).

WatchFormatSpecDropdown

Specifikátory formátu

Následující tabulky popisují specifikátory formátu, které můžete použít v sadě Visual Studio. Specifikátory tučně zvýrazněné jsou podporovány pouze pro nový ladicí program, a nikoli pro ladění spolupráce s C++/CLI.

Specifikátor Formát Původní hodnota sledování Zobrazená hodnota
d desítkové celé číslo 0x00000066 102
o osmičkové celé číslo bez znaménka 0x00000066 000000000146
x

h
šestnáctkové celé číslo 102 0xcccccccc
X

H
šestnáctkové celé číslo 102 0xCCCCCCCC
xb

hb
šestnáctkové celé číslo (bez úvodních 0x) 102 cccccccc
Xb

Hemoglobin
šestnáctkové celé číslo (bez úvodních 0x) 102 CCCCCCCC
b binární celé číslo bez znaménka 25 0b00000000000000000000000000011001
Bb neznamá binární celé číslo (bez úvodního 0b) 25 00000000000000000000000000011001
e exponenciální notace 25000000 2.500000e+07
g kratší vědeckého nebo plovoucího bodu 25000000 2,5e+07
c jeden znak 0x0065 101 „e“
s const char* řetězec (s uvozovkami) <poloha> "hello world" "ahoj světe"
Sb const char* řetězec (bez uvozovek) <poloha> "hello world" Ahoj světe
s8 Řetězec UTF-8 <umístění> "Toto je UTF-8 kávový šálek â ̃• " "Toto je UTF-8 kávový šálek ☕ "
s8b Řetězec UTF-8 (bez uvozovek) <poloha> "hello world" Ahoj světe
Su Řetězec kódování Unicode (kódování UTF-16) (s uvozovkami) <location> L"hello world" L"hello world"

"ahoj světe"
sub Řetězec kódování Unicode (kódování UTF-16) (bez uvozovek) <poloha> L"hello world" Ahoj světe
bstr Binární řetězec BSTR (s uvozovkami) <poloha> L"hello world" L"hello world"
env Blok prostředí (řetězec ukončený dvěma nulovými znaky) <umístění> L"=::=::\\" L"=::=::\\\0=C:=C:\\windows\\system32\0ALLUSERSPROFILE=...
s32 Řetězec UTF-32 (s uvozovkami) <poloha> U"hello world" U"hello world"
s32b Řetězec UTF-32 (bez uvozovek) <umístění> U"hello world" Ahoj světe
en výčet Sobota(6) Sobota
Hv Typ ukazatele – označuje, že kontrolovaná hodnota ukazatele je výsledkem přidělení haldy pole, new int[3]například . <umístění>{<první člen>} <location>{<první člen>, <druhý člen>, ...}
sodík Potlačí adresu paměti ukazatele na objekt. <location>, {member=value...} {member=value...}
Nd Zobrazí pouze informace základní třídy, které ignorují odvozené třídy. (Shape*) square obsahuje základní třídu a informace o odvozené třídě. Zobrazí pouze informace o základní třídě.
hr Kód chyby HRESULT nebo Win32 Tento specifikátor už není pro HRESULT potřeba, protože ladicí program je dekóduje automaticky. S_OK S_OK
WC Příznak třídy okna 0x0010 WC_DEFAULTCHAR
wm Čísla zpráv systému Windows 16 WM_CLOSE
Nr Skrýt položku Nezpracované zobrazení
nvo Zobrazit položku Surové zobrazení pouze pro číselné hodnoty
! nezpracovaný formát bez ohledu na vlastní nastavení zobrazení datových typů <přizpůsobená reprezentace> 4
popisovač Zobrazí informace o popisovači Win32. 0x000000000000009c Zobrazí užitečné informace o handle, jako je ID vlákna atd.

Poznámka:

Pokud je k dispozici specifikátor formátu hv , ladicí program se pokusí určit délku vyrovnávací paměti a zobrazit tento počet prvků. Protože ladicí program nemůže vždy určit přesnou velikost vyrovnávací paměti pole, měli byste kdykoli je to možné použít specifikátor velikosti (pBuffer,[bufferSize]). Specifikátor formátu hv je užitečný, pokud velikost vyrovnávací paměti není snadno dostupná.

Specifikátory velikosti pro ukazatele formou polí

Pokud máte ukazatel na objekt, který chcete zobrazit jako pole, můžete k určení počtu prvků pole použít celé číslo nebo výraz.

Specifikátor Formát Původní hodnota sledování Zobrazená hodnota
n Desetinné nebo šestnáctkové celé číslo pBuffer,[32]

pBuffer,[0x20]
Zobrazí se pBuffer jako pole o 32 prvcích.
[exp] Platný výraz jazyka C++, který se vyhodnotí jako celé číslo. pBuffer,[bufferSize] Zobrazí pBuffer jako pole bufferSize prvků.
expand(n) Platný výraz C++, který se vyhodnotí jako celé číslo pBuffer, rozšířit(2) Zobrazí třetí prvek pBuffer

Specifikátory formátu při ladění interoperability s C++/CLI

Specifikátor Formát Původní hodnota sledování Zobrazená hodnota
o osmičkové celé číslo bez znaménka 0xF065 0170145
x

X
Šestnáctkové celé číslo 61541 0x0000f065
c jeden znak <umístění> 101 'e'
s const char* (s uvozovkami) <umístění> "Ahoj světe"
Su const wchar_t*

const char16_t* (s uvozovkami)
<umístění> L"hello world"
sub const wchar_t*

const char16_t*
<umístění> Ahoj světe
s8 const char* (s uvozovkami) <umístění> ahoj světe
hr Kód chyby HRESULT nebo Win32
Tento specifikátor už není pro HRESULT potřeba, protože ladicí program je dekóduje automaticky.
S_OK S_OK
WC Příznak třídy okna 0x00000040, WC_DEFAULTCHAR
wm Čísla zpráv systému Windows 0x0010 WM_CLOSE
! surový formát bez ohledu na nastavení zobrazení datového typu <přizpůsobená reprezentace> 4

d, e, f, g, h, i, l, m, ma, mb, md, mq, mu, mw a u specifikátory pro nativní kód a C++/CLI vyžadovaly starší ladicí program, který není podporován ve Visual Studio 2022 ani novějších verzích.

Specifikátory tučného písma jsou podporovány pouze pro ladění nativního kódu jazyka C++/CLI. Tyto specifikátory vyžadují ladicí program ve starším režimu, specifikovaný s využitím režimu spravované kompatibility.

Specifikátor Formát Původní hodnota sledování Zobrazená hodnota
d

podepsané celé číslo 0xF000F065 -268373915
u celé číslo bez znaménka 0x0065 101
o osmičkové celé číslo bez znaménka 0xF065 0170145
x

X
Šestnáctkové celé číslo 61541 0x0000f065
l

h
dlouhá nebo krátká předpona pro: d, i, u, o, x, X 00406042 0x0c22
f podepsaná plovoucí řádová čárka (3./2.), f 1.500000
e podepsaná vědecká notace (3.0/2.0) 1.500000e+000
g podepsanou plovoucí desetinou čárkou nebo podepsanou vědeckou notací,
podle toho, co je kratší
(3.0/2.0) 1.5
c jeden znak <umístění> 101 „e“
s const char* (s uvozovkami) <umístění> "ahoj světe"
Su const wchar_t*

const char16_t* (s uvozovkami)
<umístění> L"hello world"
sub const wchar_t*

const char16_t*
<umístění> Ahoj světe
s8 const char* (s uvozovkami) <umístění> "ahoj světe"
hr Kód chyby HRESULT nebo Win32
Tento specifikátor už není pro HRESULT potřeba, protože ladicí program je dekóduje automaticky.
S_OK S_OK
WC Příznak třídy okna 0x00000040, WC_DEFAULTCHAR
wm Čísla zpráv systému Windows 0x0010 WM_CLOSE
! nezpracovaný formát bez ohledu na uživatelská nastavení zobrazení datového typu <přizpůsobená reprezentace> 4

Specifikátory formátu pro umístění paměti v ladění spolupráce pomocí C++/CLI

Následující tabulka popisuje symboly formátování používané pro umístění paměti. Specifikátor umístění paměti můžete použít s libovolnou hodnotou nebo výrazem, který se vyhodnotí jako umístění.

Specifikátory tučného písma jsou podporovány pouze pro ladění nativního kódu jazyka C++/CLI. To vyžaduje zastaralý ladicí program, specifikovaný pomocí režimu spravované kompatibility.

Symbol Formát Původní hodnota sledování Zobrazená hodnota
mA 64 znaků ASCII 0x0012ffac 0x0012ffac .4...0...". 0W&....... 1W&.0.:W.. 1....".. 1.JO&.1.2..". 1...0y.... 1
m 16 bajtů v šestnáctkové soustavě následované 16 znaky 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ů v šestnáctkové soustavě následované 16 znaky ASCII 0x0012ffac 0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0...".0W&..
mw 8 slov 0x0012ffac 0x0012ffac 34B3 00CB 3084 8094 22FF 308A 2657 0000
md 4 dvojice slov 0x0012ffac 0x0012ffac 00CB34B3 80943084 308A22FF 00002657
mq 2 čtyřúhelníku 0x0012ffac 0x0012ffac 7ffdf00000000000 5f441a790012fdd4
µ 2 bajtové znaky (Unicode) 0x0012ffac 0x0012ffac 8478 77f4 ffff ffff 0000 0000 0000 0000

Specifikátor velikosti pro ukazatele jako pole v ladění spolupráce pomocí C++/CLI

Pokud máte ukazatel na objekt, který chcete zobrazit jako pole, můžete použít celé číslo k určení počtu prvků pole.

Specifikátor Formát Expression Zobrazená hodnota
n Desetinné celé číslo pBuffer[32] Zobrazí pBuffer se jako pole s 32 prvky.