Bagikan melalui


Penentu format untuk C++ di debugger Visual Studio

Anda dapat mengubah format di mana nilai ditampilkan di jendela Watch, Autos, dan Locals dengan menggunakan penentu format.

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

Nota

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

Mengatur spesifikator format

Kami akan menggunakan contoh kode berikut:

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

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

Cuplikan layar jendela Visual Studio Watch dengan satu baris yang dipilih yang menampilkan my_var1.c dengan nilai 101 'e' dan jenis int.

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

WatchFormatSpecDropdown

Spesifikasi format

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

Spesifikator Rancangan Nilai Jam Tangan Asli Nilai Ditampilkan
d bilangan bulat desimal 0x00000066 102
o bilangan bulat oktal yang tidak ditandatangani 0x00000066 000000000146
x

h
bilangan bulat heksadesimal 102 0xcccccccc
X

H
bilangan bulat heksadesimal 102 0xCCCCCCCC
Xb

Hb
bilangan bulat heksadesimal (tanpa leading 0x) 102 cccccccc
Xb

Hb
bilangan bulat heksadesimal (tanpa leading 0x) 102 CCCCCCCC
b bilangan bulat biner yang tidak ditandatangani Dua puluh lima 0b00000000000000000000000000011001
Bb bilangan bulat biner yang tidak ditandatangani(tanpa 0b di depan) Dua puluh lima 00000000000000000000000000011001
e notasi ilmiah 25000000 2.500000e+07
g versi singkat dari notasi ilmiah atau floating point 25000000 2.5e+07
c karakter tunggal 0x0065 101 'e'
s const char* string (dengan tanda kutip) <lokasi> "halo dunia" "halo dunia"
Sb const char* string (tanpa tanda kutip) <lokasi> "halo dunia" Halo dunia
s8 String UTF-8 <lokasi> "Ini adalah cangkir kopi UTF-8 ☕" "Ini adalah cangkir ☕ kopi UTF-8"
s8b String UTF-8 (tanpa tanda kutip) <lokasi> "halo dunia" Halo dunia
Su String Unicode (pengodean UTF-16) (dengan tanda kutip) <location> L"salam dunia" L"halo dunia"

"halo dunia"
Subkategori String Unicode (pengodean UTF-16) (tanpa tanda kutip) <location> L"hello world" Halo dunia
bstr String biner BSTR (dengan tanda kutip) <location> L"hello world" L"halo dunia"
env Blok lingkungan (string yang diakhiri dengan null ganda) <location> L"=::=:::\\" L"=::=:\\\0=C:=C:\windows\\system32\0ALLUSERSPROFILE=...
s32 String UTF-32 (dengan tanda kutip) <location> U"hello world" U"halo dunia"
s32b String UTF-32 (tanpa tanda kutip) <location> U"hello world" Halo dunia
En enum Sabtu(6) Sabtu
Hv Jenis pointer - menunjukkan bahwa nilai pointer yang diperiksa adalah hasil dari alokasi heap sebuah array, misalnya, new int[3]. <lokasi>{<anggota pertama>} <lokasi>{<anggota pertama>, <anggota kedua>, ...}
Na Menyembunyikan alamat memori dari penunjuk ke objek. <lokasi>, {member=value...} {member=value...}
Nd Hanya menampilkan informasi kelas dasar, mengabaikan kelas turunan (Shape*) square termasuk kelas dasar dan informasi kelas turunan Hanya menampilkan informasi kelas dasar
hr Kode kesalahan HRESULT atau Win32. Penentu ini tidak lagi diperlukan untuk HRESULT karena debugger mendekodenya secara otomatis. S_OK S_OK
Wc Penanda kelas jendela 0x0010 WC_DEFAULTCHAR
Wm Nomor pesan Windows 16 WM_CLOSE
Nr Sembunyikan item "Tampilan Mentah"
nvo Perlihatkan item "Tampilan Baku" hanya untuk nilai numerik
! format mentah, mengabaikan kustomisasi tampilan jenis data apa pun <representasi yang disesuaikan> 4
handel Menampilkan informasi tentang handle win32 0x000000000000009c Menampilkan informasi yang berguna tentang handle seperti ID thread, dll.

Nota

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

Penentu ukuran untuk pointer sebagai array

Jika Anda memiliki penunjuk ke objek yang ingin Anda lihat sebagai array, Anda bisa menggunakan bilangan bulat atau ekspresi untuk menentukan jumlah elemen array.

Spesifikator Rancangan Nilai Jam Tangan Asli Nilai Ditampilkan
n Bilangan bulat desimal atau heksadesimal pBuffer,[32]

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

Penentu format untuk debugging interopabilitas dengan C++/CLI

Spesifikator Rancangan Nilai Jam Tangan Asli Nilai Ditampilkan
o bilangan bulat oktal yang tidak ditandatangani 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"
Subkategori const wchar_t*

const char16_t*
<lokasi> Halo dunia
s8 const char* (dengan tanda kutip) <lokasi> "halo dunia"
hr Kode kesalahan HRESULT atau Win32.
Penentu ini tidak lagi diperlukan untuk HRESULT karena debugger mendekodenya secara otomatis.
S_OK S_OK
Wc Penanda kelas jendela 0x00000040, WC_DEFAULTCHAR
Wm Nomor pesan Windows 0x0010 WM_CLOSE
! format mentah, mengabaikan kustomisasi tampilan jenis data apa pun <representasi yang disesuaikan> 4

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

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

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

Spesifikator Rancangan Expression Nilai Ditampilkan
n Bilangan bulat desimal pBuffer[32] Menampilkan pBuffer sebagai array berisi 32 elemen.