Mengevaluasi Ekspresi

Debugger memahami dua bentuk ekspresi yang berbeda: ekspresi MASM dan ekspresi C++.

Ekspresi Microsoft Macro Assembler (MASM) digunakan dalam contoh dalam dokumentasi Bantuan ini, kecuali jika dinyatakan lain. Dalam ekspresi MASM, semua simbol diperlakukan sebagai alamat.

Ekspresi C++ sama dengan yang digunakan dalam kode C++ aktual. Dalam ekspresi ini, simbol dipahami sebagai jenis data yang sesuai.

Ketika Setiap Sintaks Digunakan

Anda dapat memilih evaluator ekspresi default dengan salah satu cara berikut:

Jika Anda tidak menggunakan salah satu metode sebelumnya, debugger menggunakan evaluator ekspresi MASM.

Jika Anda ingin mengevaluasi ekspresi tanpa mengubah status debugger, Anda dapat menggunakan ? (Evaluasi Ekspresi) Perintah.

Semua perintah dan jendela informasi penelusuran kesalahan menginterpretasikan argumennya melalui evaluator ekspresi default, dengan pengecualian berikut:

  • Ini ?? (Evaluasi Ekspresi C++) perintah selalu menggunakan evaluator ekspresi C++.

  • Jendela Watch selalu menggunakan evaluator ekspresi C++.

  • Jendela Lokal selalu menggunakan evaluator ekspresi C++.

  • Beberapa perintah ekstensi selalu menggunakan evaluator ekspresi MASM (dan perintah ekstensi lainnya hanya menerima argumen numerik alih-alih ekspresi penuh).

  • Jika ada bagian ekspresi yang diapit tanda kurung dan Anda menyisipkan dua pada tanda (@@) sebelum ekspresi, ekspresi dievaluasi oleh evaluator ekspresi yang biasanya tidak akan digunakan dalam kasus ini.

Dua tanda (@@) memungkinkan Anda menggunakan dua evaluator berbeda untuk parameter yang berbeda dari satu perintah. Ini juga memungkinkan Anda untuk mengevaluasi potongan-potongan ekspresi panjang yang berbeda dengan metode yang berbeda. Anda dapat menumpuk keduanya di tanda-tanda. Setiap tampilan dari dua tanda beralih ke evaluator ekspresi lainnya.

Peringatan Sintaks ekspresi C++ berguna untuk memanipulasi struktur dan variabel, tetapi tidak cocok sebagai pengurai untuk parameter perintah debugger. Saat Anda menggunakan perintah debugger untuk tujuan umum atau Anda menggunakan ekstensi debugger, Anda harus mengatur sintaks ekspresi MASM sebagai evaluator ekspresi default. Jika Anda harus memiliki parameter tertentu, gunakan sintaks ekspresi C++, gunakan sintaksis two at sign (@@).

Untuk informasi selengkapnya tentang dua jenis ekspresi yang berbeda, lihat Sintaks Ekspresi Numerik.

Angka dalam Ekspresi

Angka dalam ekspresi MASM ditafsirkan sesuai dengan radix saat ini. Perintah n (Atur Basis Angka) dapat digunakan untuk mengatur radix default ke 16, 10, atau 8. Semua angka yang tidak diawali akan ditafsirkan dalam basis ini. Radiks default dapat ditimpa dengan menentukan awalan 0x (heksadesimal), awalan 0n (desimal), awalan 0t (oktal), atau awalan 0y (biner).

Angka dalam ekspresi C++ ditafsirkan sebagai angka desimal kecuali Anda menentukan secara berbeda. Untuk menentukan bilangan bulat heksadesimal, tambahkan 0x sebelum angka. Untuk menentukan bilangan bulat oktal, tambahkan 0 (nol) sebelum angka. (Namun, dalam output debugger, awalan desimal 0n terkadang digunakan.)

Jika Anda ingin menampilkan angka dalam beberapa basis secara bersamaan, gunakan perintah .formats (Show Number Formats).

Simbol dalam Ekspresi

Dua jenis ekspresi menginterpretasikan simbol secara berbeda:

  • Dalam ekspresi MASM, setiap simbol ditafsirkan sebagai alamat. Tergantung pada apa yang dimaksud simbol, alamat ini adalah alamat variabel global, variabel lokal, fungsi, segmen, modul, atau label lain yang dikenali.

  • Dalam ekspresi C++, setiap simbol ditafsirkan sesuai dengan jenisnya. Bergantung pada apa yang dirujuk simbol, simbol tersebut mungkin ditafsirkan sebagai bilangan bulat, struktur data, penunjuk fungsi, atau jenis data lainnya. Simbol yang tidak sesuai dengan jenis data C++ (seperti nama modul yang tidak dimodifikasi) membuat kesalahan sintaks.

Jika simbol mungkin ambigu, awali dengan nama modul dan tanda seru ( ! ). Jika nama simbol dapat ditafsirkan sebagai angka heksadesimal, awali dengan nama modul dan tanda seru ( ! ) atau hanya tanda seru. Untuk menentukan bahwa simbol dimaksudkan untuk menjadi lokal, hilangkan nama modul, dan sertakan tanda dolar dan tanda seru ( $! ) sebelum nama simbol. Untuk informasi selengkapnya tentang menginterpretasikan simbol, lihat Sintaks Simbol dan Pencocokan Simbol.

Operator dalam Ekspresi

Setiap jenis ekspresi menggunakan kumpulan operator yang berbeda.

Untuk informasi selengkapnya tentang operator yang dapat Anda gunakan dalam ekspresi MASM dan aturan prioritasnya, lihat Nomor dan Operator MASM.

Untuk informasi selengkapnya tentang operator yang dapat Anda gunakan dalam ekspresi C++ dan aturan prioritasnya, lihat C++ Angka dan Operator.

Ingat bahwa operasi MASM selalu berbasis byte, dan operasi C++ mengikuti aturan jenis C++ (termasuk penskalaan aritmatika penunjuk).

Untuk beberapa contoh sintaks yang berbeda, lihat Contoh Ekspresi Campuran.