Bagikan melalui


Sintaks Simbol dan Pencocokan Simbol

Simbol memungkinkan Anda untuk langsung memanipulasi token yang digunakan oleh program yang sedang di-debug. Misalnya, Anda dapat mengatur titik henti di fungsi utama dengan perintah bp utama, atau menampilkan variabel bilangan bulat MyInt dengan perintah dd MyInt L1.

Dalam banyak kasus, simbol dapat digunakan sebagai parameter dalam perintah debugger. Ini didukung untuk sebagian besar parameter numerik, dan juga didukung dalam beberapa parameter teks. Selain aturan umum untuk sintaks simbol, ada juga aturan sintaks simbol yang berlaku dalam masing-masing kasus ini.

Aturan Sintaks Simbol Umum

Nama simbol terdiri dari satu atau beberapa karakter, tetapi selalu dimulai dengan huruf, garis bawah (_), tanda tanya (?), atau tanda dolar ($).

Nama simbol mungkin memenuhi syarat dengan nama modul. Tanda seru (!) memisahkan nama modul dari simbol (misalnya, mymodule!main). Jika tidak ada nama modul yang digunakan, simbol masih dapat diawali dengan tanda seru. Menggunakan tanda seru tanpa nama modul dapat sangat berguna, bahkan untuk variabel lokal, untuk menunjukkan pada perintah debugger bahwa parameter adalah nama dan bukan angka heksadesimal. Misalnya, variabel memudar akan dibaca oleh perintah dt (Jenis Tampilan) sebagai alamat, kecuali jika diawali dengan tanda seru atau opsi -n digunakan. Namun, untuk menentukan bahwa simbol bersifat lokal, mendahuluinya dengan tanda dolar ( $ ) dan tanda seru ( ! ), seperti dalam $!lime.

Nama simbol benar-benar tidak peka huruf besar/kecil. Ini berarti bahwa kehadiran myInt dan MyInt dalam program Anda tidak akan dipahami dengan benar oleh debugger; perintah apa pun yang mereferensikan salah satu dari ini dapat mengakses yang lain, terlepas dari bagaimana perintah dikapitalisasi.

Sintaks Simbol dalam Ekspresi Numerik

Debugger memahami dua jenis ekspresi yang berbeda: ekspresi Microsoft Macro Assembler (MASM) dan ekspresi C++. Sejauh menyangkut simbol, kedua bentuk sintaks ini berbeda sebagai berikut:

  • Dalam ekspresi MASM, setiap simbol ditafsirkan sebagai alamat. Tergantung pada apa yang dirujuk simbol, ini akan menjadi 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 oleh simbol, simbol tersebut dapat 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) akan mengakibatkan kesalahan sintaks.

Untuk penjelasan tentang kapan dan bagaimana menggunakan setiap jenis sintaks, lihat Mengevaluasi Ekspresi.

Jika Anda menggunakan sintaks ekspresi MASM, simbol apa pun yang dapat ditafsirkan sebagai angka heksadesimal atau sebagai register (misalnya, BadFeed, ebX) harus selalu diawali dengan tanda seru. Ini memastikan debugger mengenalinya sebagai simbol.

Perintah ss (Atur Akhiran Simbol) dapat digunakan untuk mengatur akhiran simbol. Ini menginstruksikan debugger untuk secara otomatis menambahkan "A" atau "W" ke nama simbol apa pun yang tidak dapat ditemukan sebaliknya.

Banyak rutinitas Win32 ada dalam versi ASCII dan Unicode. Rutinitas ini sering memiliki "A" atau "W" yang ditambahkan ke akhir nama mereka, masing-masing. Menggunakan akhiran simbol akan membantu debugger saat mencari simbol ini.

Pencocokan akhiran tidak aktif secara default.

Sintaks Simbol dalam Ekspresi Teks

Simbol dapat digunakan dalam parameter teks dari beberapa perintah -- misalnya, bm (Atur Titik Henti) dan x (Periksa Simbol).

Parameter teks ini mendukung berbagai kartubebas dan penentu. Lihat Sintaks Wildcard String untuk detailnya. Selain kartubebas string standar, ekspresi teks yang digunakan untuk menentukan simbol dapat diawali dengan garis bawah di depannya. Saat mencocokkan ini dengan simbol, debugger akan memperlakukan ini sebagai jumlah garis bawah apa pun, bahkan nol.

Akhiran simbol tidak digunakan saat mencocokkan simbol dalam ekspresi teks.