Bagikan melalui


Penentu format untuk C++ di debugger Visual Studio

Anda dapat mengubah format tempat nilai ditampilkan di jendela Pengawasan, Otomatis, dan Lokal dengan menggunakan penentu format.

Anda juga dapat menggunakan penentu format di jendela Langsung, jendela Perintah, di titik pelacakan, dan bahkan di jendela sumber. Jika Anda menjeda ekspresi di jendela tersebut, hasilnya akan muncul di DataTip. Tampilan DataTip mencerminkan penentu format.

Catatan

Ketika debugger asli Visual Studio berubah menjadi mesin penelusuran kesalahan baru, beberapa penentu format baru ditambahkan dan beberapa yang lama dihapus. Debugger yang lebih lama masih digunakan saat Anda melakukan penelusuran kesalahan interop (campuran asli dan terkelola) dengan C++/CLI.

Menetapkan penentu format

Kita akan menggunakan contoh kode berikut:

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

Tambahkan variabel my_var1 ke jendela Pengawasan saat penelusuran kesalahan, Debug>Windows>Pengawasan>Pengawasan 1. Selanjutnya, klik kanan variabel dan pilih Tampilan Heksadesimal. Sekarang jendela Pengawasan menampilkan nilai 0x0065. Untuk melihat nilai ini dinyatakan sebagai karakter dan bukan bilangan bulat, pertama-tama klik kanan dan batalkan pilihan Tampilan Heksadesimal. Kemudian tambahkan penentu format karakter , c di kolom Nama setelah nama variabel. Kolom Nilai sekarang memperlihatkan 101 'e'.

Screenshot of the Visual Studio Watch window with one selected line that shows my_var1.c with a value of 101 'e' and a type of int.

Anda dapat melihat dan memilih dari daftar penentu format yang tersedia dengan menambahkan koma (,) ke nilai di jendela Pengawasan.

WatchFormatSpecDropdown

Penentu format

Tabel berikut ini menjelaskan penentu format yang dapat digunakan di Visual Studio. Penentu yang bercetak tebal hanya didukung untuk debugger baru, dan bukan untuk penelusuran kesalahan interop dengan C++/CLI.

Penentu Format Nilai Pengawasan Asli Nilai yang Ditampilkan
d bilangan bulat desimal 0x00000066 102
o bilangan bulat oktal tidak bertanda 0x00000066 000000000146
x

h
bilangan bulat heksadesimal 102 0xcccccccc
X

H
bilangan bulat heksadesimal 102 0xCCCCCCCC
xb

hb
bilangan bulat heksadesimal (tanpa awalan 0x) 102 cccccccc
Xb

Hb
bilangan bulat heksadesimal (tanpa awalan 0x) 102 CCCCCCCC
b bilangan bulat biner tidak bertanda 25 0b00000000000000000000000000011001
bb bilangan bulat biner yang tidak bertanda (tanpa awalan 0b) 25 00000000000000000000000000011001
e notasi ilmiah 25000000 2.500000e+07
g lebih pendek dari ilmiah atau titik ambang 25000000 2.5e+07
c karakter tunggal 0x0065 101 'e'
s string const char* (dengan tanda kutip) <location> "halo dunia" "halo dunia"
sb string const char* (tanpa tanda kutip) <location> "halo dunia" halo dunia
s8 String UTF-8 <location> "Ini adalah secangkir kopi ☕ UTF-8" "Ini adalah secangkir kopi ☕ UTF-8"
s8b String UTF-8 (tanpa tanda kutip) <location> "halo dunia" halo dunia
su String Unicode (pengodean UTF-16) (dengan tanda kutip) <location> L"halo dunia" L"halo dunia"

u"halo dunia"
sub String Unicode (pengodean UTF-16) (tanpa tanda kutip) <location> L"halo dunia" halo dunia
bstr String biner BSTR (dengan tanda kutip) <location> L"halo dunia" L"halo dunia"
env Blok lingkungan (string diakhiri dengan dua null) <location> L"=::=::\\" L"=::=::\\\0=C:=C:\\windows\\system32\0ALLUSERSPROFILE=...
s32 String UTF-32 (dengan tanda kutip) <location> U"halo dunia" U"halo dunia"
s32b String UTF-32 (tanpa tanda kutip) <location> U"halo dunia" halo dunia
en enum Sabtu(6) Sabtu
hv Jenis pointer - menunjukkan bahwa nilai pointer yang diperiksa adalah hasil dari alokasi tumpukan array, misalnya, new int[3]. <location>{<first member>} <location>{<first member>, <second member>, ...}
na Menekan alamat memori pointer ke objek. <location>, {member=value...} {member=value...}
nd Hanya menampilkan informasi kelas dasar, mengabaikan kelas turunan (Shape*) square termasuk informasi kelas dasar dan kelas turunan Hanya menampilkan informasi kelas dasar
jam Kode kesalahan HRESULT atau Win32. Penentu ini tidak lagi diperlukan untuk HRESULT karena debugger mendekodenya secara otomatis. S_OK S_OK
wc Bendera kelas jendela 0x0010 WC_DEFAULTCHAR
wm Nomor pesan jendela 16 WM_CLOSE
nr Sembunyikan item "Tampilan Mentah"
nvo Tampilkan item "Tampilan Mentah" hanya untuk nilai numerik
! format mentah, mengabaikan kustomisasi tampilan jenis data apa pun <customized representation> 4
menangani Menampilkan informasi tentang handel win32 0x000000000000009c Menampilkan informasi yang berguna tentang handel seperti ID utas, dll.

Catatan

Ketika penentu format hv ada, debugger mencoba menentukan panjang buffer dan menampilkan jumlah elemen tersebut. Karena debugger tidak selalu dapat menemukan ukuran buffer array yang tepat, Anda harus menggunakan penentu ukuran (pBuffer,[bufferSize]) jika memungkinkan. Penentu format hv berguna ketika ukuran buffer tidak tersedia.

Penentu ukuran untuk pointer sebagai array

Jika memiliki pointer ke objek yang ingin ditampilkan sebagai array, Anda dapat menggunakan bilangan bulat atau ekspresi untuk menentukan jumlah elemen array.

Penentu Format Nilai Pengawasan Asli Nilai yang Ditampilkan
n Bilangan bulat desimal atau heksadesimal pBuffer,[32]

pBuffer,[0x20]
Menampilkan pBuffer sebagai array 32 elemen.
[exp] Ekspresi C++ valid yang mengevaluasi ke bilangan bulat. pBuffer,[bufferSize] Menampilkan pBuffer sebagai array elemenbufferSize.
expand(n) Ekspresi C++ valid yang mengevaluasi ke bilangan bulat pBuffer, luaskan(2) Menampilkan elemen ketiga dari pBuffer

Penentu format untuk penelusuran kesalahan interop dengan C++/CLI

Penentu Format Nilai Pengawasan Asli Nilai yang Ditampilkan
o bilangan bulat oktal tidak bertanda 0xF065 0170145
x

X
Bilangan bulat heksadesimal 61541 0x0000f065
c karakter tunggal <Lokasi> 101 'e'
s const char* (dengan tanda kutip) <Lokasi> "halo dunia"
su const wchar_t*

const char16_t* (dengan tanda kutip)
<Lokasi> L"halo dunia"
sub const wchar_t*

const char16_t*
<Lokasi> halo dunia
s8 const char* (dengan tanda kutip) <Lokasi> "halo dunia"
jam Kode kesalahan HRESULT atau Win32.
Penentu ini tidak lagi diperlukan untuk HRESULT karena debugger mendekodenya secara otomatis.
S_OK S_OK
wc Bendera kelas jendela 0x00000040, WC_DEFAULTCHAR
wm Nomor pesan jendela 0x0010 WM_CLOSE
! format mentah, mengabaikan kustomisasi tampilan jenis data apa pun <customized representation> 4

Penentu d, e, f, g, h, i, l, m, ma, mb, md, mq, mu, mw, dan u untuk kode C++/CLI dan asli memerlukan debugger lama, yang tidak didukung di Visual Studio 2022 atau versi yang lebih baru.

Penentu bercetak tebal hanya didukung untuk penelusuran kesalahan kode C++/CLI dan asli. Penentu tersebut memerlukan debugger lama, yang ditentukan menggunakan Mode Kompatibilitas Terkelola.

Penentu Format Nilai Pengawasan Asli Nilai yang Ditampilkan
d

i
bilangan bulat desimal bertanda 0xF000F065 -268373915
u bilangan bulat desimal tidak bertanda 0x0065 101
o bilangan bulat oktal tidak bertanda 0xF065 0170145
x

X
Bilangan bulat heksadesimal 61541 0x0000f065
l

h
awalan panjang atau pendek untuk: d, i, u, o, x, X 00406042 0x0c22
f titik ambang bertanda (3./2.), f 1.500000
e notasi ilmiah bertanda (3.0/2.0) 1.500000e+000
g titik ambang bertanda atau notasi ilmiah bertanda,
mana pun yang lebih pendek
(3.0/2.0) 1.5
c karakter tunggal <Lokasi> 101 'e'
s const char* (dengan tanda kutip) <Lokasi> "halo dunia"
su const wchar_t*

const char16_t* (dengan tanda kutip)
<Lokasi> L"halo dunia"
sub const wchar_t*

const char16_t*
<Lokasi> halo dunia
s8 const char* (dengan tanda kutip) <Lokasi> "halo dunia"
jam Kode kesalahan HRESULT atau Win32.
Penentu ini tidak lagi diperlukan untuk HRESULT karena debugger mendekodenya secara otomatis.
S_OK S_OK
wc Bendera kelas jendela 0x00000040, WC_DEFAULTCHAR
wm Nomor pesan jendela 0x0010 WM_CLOSE
! format mentah, mengabaikan kustomisasi tampilan jenis data apa pun <customized representation> 4

Penentu format untuk lokasi memori dalam penelusuran kesalahan interop dengan C++/CLI

Tabel berikut ini menjelaskan simbol pemformatan yang digunakan untuk lokasi memori. Anda dapat menggunakan penentu lokasi memori dengan nilai atau ekspresi apa pun yang mengevaluasi ke suatu lokasi.

Penentu bercetak tebal hanya didukung untuk penelusuran kesalahan kode C++/CLI dan asli. Penentu tersebut memerlukan debugger lama, yang ditentukan menggunakan Mode Kompatibilitas Terkelola.

Simbol Format Nilai Pengawasan Asli Nilai yang Ditampilkan
ma 64 karakter ASCII 0x0012ffac 0x0012ffac .4...0...". 0W&....... 1W&.0.:W.. 1....".. 1.JO&.1.2..".. 1...0y.... 1
m 16 byte dalam heksadesimal, diikuti oleh 16 karakter ASCII 0x0012ffac 0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0...". 0W&..
mb 16 byte dalam heksadesimal, diikuti oleh 16 karakter ASCII 0x0012ffac 0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0...". 0W&..
mw 8 kata 0x0012ffac 0x0012ffac 34B3 00CB 3084 8094 22FF 308A 2657 0000
/md 4 dua kata 0x0012ffac 0x0012ffac 00CB34B3 80943084 308A22FF 00002657
mq 2 empat kata 0x0012ffac 0x0012ffac 7ffdf00000000000 5f441a790012fdd4
Mu Karakter 2-byte (Unicode) 0x0012ffac 0x0012ffac 8478 77f4 ffff ffff 0000 0000 0000 0000

Penentu ukuran untuk pointer sebagai array dalam penelusuran kesalahan interop dengan C++/CLI

Jika memiliki pointer ke objek yang ingin ditampilkan sebagai array, Anda dapat menggunakan bilangan bulat untuk menentukan jumlah elemen array.

Penentu Format Expression Nilai yang Ditampilkan
n Bilangan bulat desimal pBuffer[32] Menampilkan pBuffer sebagai array 32-elemen.