Megosztás a következőn keresztül:


A C++ formátumjelölői a Visual Studio hibakeresőjében

Formátumjelölők használatával módosíthatja, hogy milyen formátumban jelenjen meg egy érték a Watch, az Autos és a Locals ablakban.

A formátumjelölőket az Azonnali ablakban, a Parancs ablakban, a nyomkövetési pontokban és még a forrásablakokban is használhatja. Ha ezekben az ablakokban szüneteltet egy kifejezést, az eredmény egy adatleírásban jelenik meg. A DataTip kijelző a formátumkijelölőt tükrözi.

Megjegyzés:

Amikor a Visual Studio natív hibakeresője új hibakeresési motorra váltott, néhány új formátumjelölőt hozzáadtak, és néhány régit eltávolítottak. A régebbi hibakereső akkor is használható, ha a C++/CLI használatával végez interop (vegyes natív és felügyelt) hibakeresést.

Formátumkijelölők beállítása

A következő példakódot fogjuk használni:

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

Adja hozzá a my_var1 változót a Watch ablakhoz hibakeresés közben, Debug>Windows>Watch>Watch 1 alatt. Ezután kattintson a jobb gombbal a változóra, és válassza a Hexadecimális megjelenítés lehetőséget. Most a Figyelő ablak a 0x0065 értéket jeleníti meg. Ha ezt az értéket egész szám helyett karakterként szeretné megjeleníteni, először kattintson a jobb gombbal, és törölje a hexadecimális megjelenítés kijelölését. Ezután adja hozzá a karakterformátum-megadót , c karaktert a változó neve utáni Név oszlopba. Az Érték oszlop ekkor 101 "e" értéket jelenít meg.

Képernyőkép a Visual Studio Watch ablakról egy kijelölt vonallal, amely az my_var1.c értéket jeleníti meg 101

Az elérhető formátumjelölők listájából úgy tekintheti meg és választhat, hogy vesszőt (,) fűz hozzá a Figyelő ablakban lévő értékhez.

WatchFormatSpecDropdown

Formázási definiálók

Az alábbi táblázatok a Visual Studióban használható formátumjelölőket ismertetik. A félkövér betűvel jelölt definiálók csak az új hibakeresőhöz támogatottak, a C++/CLI-vel végzett interop hibakereséshez nem.

Kijelölő Formátum Eredeti óraérték Megjelenített érték
d decimális egész szám 0x00000066 102
o aláíratlan oktális egész szám 0x00000066 000000000146
x

h
hexadecimális egész szám 102 0xcccccccc
X

H
hexadecimális egész szám 102 0xCCCCCCCC
xb

Hb
hexadecimális egész szám (bevezető 0x nélkül) 102 cccccccc
Xb

Hb
hexadecimális egész szám (bevezető 0x nélkül) 102 CCCCCCCC
b aláíratlan bináris egész szám 25 0b00000000000000000000000000011001
Bb aláíratlan bináris egész szám (kezdő 0b nélkül) 25 00000000000000000000000000011001
e tudományos jelölés 25000000 2.500000e+07
g rövidebb tudományos vagy lebegőpontos 25000000 2,5e+07
c egyetlen karakter 0x0065 101 'e'
s const char* string (idézőjelekkel) <location> "hello world" helló világ
Sb const char* string (idézőjelek nélkül) <location> "hello world" Helló világ
s8 UTF-8 sztring <helyszín> "Ez egy UTF-8 kávés csésze ☕" "Ez egy UTF-8 kávés csésze ☕"
s8b UTF-8 karakterlánc (nincs idézőjel) <location> "hello world" Helló világ
Su Unicode (UTF-16 kódolás) karakterlánc (idézőjelekkel) <location> L"hello world" L"szia világ"

u"hello world"
sub Unicode (UTF-16 kódolás) karakterlánc (idézőjelek nélkül) <location> L"hello world" Helló világ
bstr BSTR bináris sztring (idézőjelekkel) <location> L"hello world" L"hello world"
Környezet Környezeti blokk (dupla nullával lezárt karakterlánc) <hely> L"=::=::\\" L"=::=::\\\0=C:=C:\\windows\\system32\0ALLUSERSPROFILE=...
s32 UTF-32 karaktersorozat (idézőjelekkel) <location> U"hello world" U"hello world"
s32b UTF-32 karakterlánc (idézőjelek nélkül) <location> U"hello world" Helló világ
En felsorolás Szombat(6) Szombat
Hv Mutató típusa – azt jelzi, hogy a vizsgált mutató értéke egy tömb halomfoglalásának eredménye, például new int[3]. <helyszín>{<első tag>} <location>{<első tag>, <második tag>, ...}
Na Letiltja egy objektumra mutató mutató memóriacímét. <location>, {member=value...} {member=value...}
Nd Csak az alaposztály adatait jeleníti meg, figyelmen kívül hagyva a származtatott osztályokat (Shape*) square alaposztályt és származtatott osztályinformációkat tartalmaz Csak az alaposztály információinak megjelenítése
hr HRESULT vagy Win32 hibakód. Ez a paraméter már nem szükséges a HRESULT-ekhez, mivel a hibakereső automatikusan dekódolja őket. S_OK S_OK
WC Ablakosztály jelölője 0x0010 WC_DEFAULTCHAR
Wm Windows-üzenetszámok 16 WM_CLOSE
Nr "Nyers nézet" elem letiltása
nvo A "Nyers nézet" elem megjelenítése csak numerikus értékek esetén
! nyers formátum, figyelmen kívül hagyva az adattípus-nézetek testreszabását <testreszabott ábrázolás> 4
fogópont A win32 fogantyúra vonatkozó információk megjelenítése 0x000000000000009c Hasznos információkat jelenít meg a fogantyúkról, például a szálazonosítóról stb.

Megjegyzés:

Ha a hv formátumjelölő jelen van, a hibakereső megkísérli meghatározni a puffer hosszát, és megjeleníti az elemek számát. Mivel a hibakereső nem mindig találja meg a tömb pontos pufferméretét, lehetőség szerint használjon méretkijelölőt (pBuffer,[bufferSize]) . A hv formátumjelölő akkor hasznos, ha a puffer mérete nem érhető el könnyen.

A mutatók tömbökként való méretkijelölői

Ha egy tömbként megjeleníteni kívánt objektumra mutató mutatóval rendelkezik, egész számmal vagy kifejezéssel megadhatja a tömbelemek számát.

Kijelölő Formátum Eredeti óraérték Megjelenített érték
n Decimális vagy hexadecimális egész szám pBuffer,[32]

pBuffer,[0x20]
pBuffer mint 32 elemből álló tömb jelenik meg.
[exp] Érvényes C++ kifejezés, amely egész számmá értékel. pBuffer,[bufferSize] A pBuffer elemtömbként bufferSize jelenik meg.
expand(n) Érvényes C++ kifejezés, amely egész számmá értékel pBuffer, expand(2) Megjeleníti a harmadik elemet pBuffer

A C++/CLI használatával végzett interop hibakeresés formázási specifikátorai

Kijelölő Formátum Eredeti óraérték Megjelenített érték
o aláíratlan oktális egész szám 0xF065 0170145
x

X
Hexadecimális egész szám 61541 0x0000f065
c egyetlen karakter <helyszín> 101 'e'
s const char* (idézőjelekkel) <hely> helló világ
Su const wchar_t*

const char16_t* (idézőjelekkel)
<lokáció> L"hello world"
sub const wchar_t*

const char16_t*
<lokáció> Helló világ
s8 const char* (idézőjelekkel) <hely> helló világ
hr HRESULT vagy Win32 hibakód.
Ez a paraméter már nem szükséges a HRESULT-ekhez, mivel a hibakereső automatikusan dekódolja őket.
S_OK S_OK
WC Ablakosztály jelölője 0x00000040, WC_DEFAULTCHAR
Wm Windows-üzenetszámok 0x0010 WM_CLOSE
! nyers formátum, figyelmen kívül hagyva az adattípus nézet testreszabását <testreszabott ábrázolás> 4

A d, e, f, g, h, i, l, m, ma, mb, md, mq, mu, mw és u specifikátorok, amelyek a natív és C++/CLI kód számára voltak használandók, a régi hibakeresőt igényelték, amit a Visual Studio 2022-es vagy újabb verziói nem támogatnak.

A félkövér betűs definiálók csak natív és C++/CLI-kód hibakereséséhez támogatottak. Ezekhez a szpecifikátorokhoz a felügyelt kompatibilitási móddal megadott régi hibakeresőre van szükség.

Kijelölő Formátum Eredeti óraérték Megjelenített érték
d

én
aláírt decimális egész szám 0xF000F065 -268373915
u előjel nélküli decimális egész szám 0x0065 101
o aláíratlan oktális egész szám 0xF065 0170145
x

X
Hexadecimális egész szám 61541 0x0000f065
l

h
hosszú vagy rövid előtag: d, i, u, o, x, X 00406042 0x0c22
f aláírt lebegőpontos (3./2.), f 1.500000
e aláírt tudományos jelölés (3.0/2.0) 1.500000e+000
g aláírt lebegőpontos vagy aláírt tudományos jelölés,
amelyik rövidebb
(3.0/2.0) 1.5
c egyetlen karakter <hely> 101 'e'
s const char* (idézőjelekkel) <hely> helló világ
Su const wchar_t*

const char16_t* (idézőjelekkel)
<hely> L"hello world"
sub const wchar_t*

const char16_t*
<hely> Helló világ
s8 const char* (idézőjelekkel) <hely> helló világ
hr HRESULT vagy Win32 hibakód.
Ez a paraméter már nem szükséges a HRESULT-ekhez, mivel a hibakereső automatikusan dekódolja őket.
S_OK S_OK
WC Ablakosztály jelölője 0x00000040, WC_DEFAULTCHAR
Wm Windows-üzenetszámok 0x0010 WM_CLOSE
! nyers formátum, figyelmen kívül hagyva az adattípus nézet testreszabását <testreszabott ábrázolás> 4

Memóriahely-meghatározók formázása a C++/CLI használatával végzett interop hibakeresésben

Az alábbi táblázat a memóriahelyekhez használt formázási szimbólumokat ismerteti. A memóriahely-kijelölőt bármely olyan értékkel vagy kifejezéssel használhatja, amely egy helyre értékelődik ki.

A félkövér betűs definiálók csak natív és C++/CLI-kód hibakereséséhez támogatottak. Ehhez a felügyelt kompatibilitási móddal megadott régi hibakeresőre van szükség.

Szimbólum Formátum Eredeti óraérték Megjelenített érték
ma 64 ASCII-karakter 0x0012ffac 0x0012ffac .4...0...". 0W&....... 1W&.0.:W.. 1....".. 1.JO&.1.2...".. 1...0y.... 1
m 16 bájt hexadecimális, majd 16 ASCII karakter 0x0012ffac 0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0...".0W&.
Mb 16 bájt hexadecimális, majd 16 ASCII karakter 0x0012ffac 0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0...".0W&..
mw 8 szó 0x0012ffac 0x0012ffac 34B3 00CB 3084 8094 22FF 308A 2657 0000
md 4 duplaszó 0x0012ffac 0x0012ffac 00CB34B3 80943084 308A22FF 00002657
mq 2 quadwords 0x0012ffac 0x0012ffac 7ffdf00000000000 5f441a790012fdd4
2 bájtos karakterek (Unicode) 0x0012ffac 0x0012ffac 8478 77f4 ffff ffff 0000 0000 0000 0000

A mutatók méretkijelölője tömbökként a C++/CLI használatával végzett interop hibakeresésben

Ha egy tömbként megtekinteni kívánt objektumra mutató mutató van, egész számmal megadhatja a tömbelemek számát.

Kijelölő Formátum Expression Megjelenített érték
n Decimális egész szám pBuffer[32] 32 elemű tömbként jelenik meg pBuffer .