Bagikan melalui


Cakupan dan Grup Simbol

Grup simbol berisi sekumpulan simbol untuk manipulasi yang efisien sebagai grup. Grup simbol dapat dibuat dan diisi secara manual atau dapat dibuat dan diperbarui secara otomatis berdasarkan simbol dalam cakupan leksikal, seperti variabel lokal dan argumen fungsi. Antarmuka IDebugSymbolGroup digunakan untuk mewakili grup simbol.

Ada dua cara untuk membuat grup simbol. Grup simbol kosong dikembalikan oleh CreateSymbolGroup, dan grup simbol untuk cakupan leksikal saat ini dikembalikan oleh GetScopeSymbolGroup.

Catatan Grup simbol yang dihasilkan dari cakupan saat ini adalah rekam jepret dari variabel lokal. Jika ada eksekusi yang terjadi dalam target, simbol mungkin tidak lagi akurat. Selain itu, jika cakupan saat ini berubah, grup simbol tidak akan lagi mewakili cakupan saat ini (karena akan terus mewakili cakupan yang dibuatnya).

Simbol dapat ditambahkan ke grup simbol menggunakan AddSymbol, dan dihapus menggunakan RemoveSymbolByIndex atau RemoveSymbolByName. Metode OutputAsType memberi tahu debugger untuk menggunakan jenis simbol yang berbeda saat menangani data simbol.

Catatan Nilai untuk simbol terlingkup mungkin tidak akurat. Secara khusus, arsitektur mesin dan pengoptimalan pengkompilasi dapat mencegah debugger menentukan nilai simbol secara akurat.

Informasi entri simbol adalah deskripsi simbol, termasuk lokasi dan jenisnya. Untuk menemukan informasi ini untuk simbol dalam modul, gunakan IDebugSymbols3::GetSymbolEntryInformation. Untuk menemukan informasi ini untuk simbol dalam grup simbol, gunakan IDebugSymbolGroup2::GetSymbolEntryInformation. Lihat DEBUG_SYMBOL_ENTRY untuk detail informasi entri simbol.

Metode berikut mengembalikan informasi tentang simbol dalam grup simbol:

Jika simbol disimpan dalam register atau di lokasi memori yang diketahui oleh mesin debugger, nilainya dapat diubah menggunakan WriteSymbol.

Simbol adalah simbol induk jika berisi simbol lain. Misalnya, struktur berisi anggotanya. Simbol adalah simbol anak jika terkandung dalam simbol lain. Simbol mungkin simbol induk dan anak. Setiap kelompok simbol memiliki struktur datar dan berisi simbol induk dan anak-anaknya. Setiap simbol memiliki kedalaman -- simbol tanpa orang tua dalam kelompok simbol memiliki kedalaman nol, dan kedalaman setiap simbol anak adalah satu lebih besar dari kedalaman induknya. Turunan dari simbol induk mungkin atau mungkin tidak ada dalam grup simbol. Ketika anak-anak hadir dalam grup simbol, simbol induk disebut sebagai diperluas. Untuk menambahkan atau menghapus turunan simbol dalam grup simbol, gunakan ExpandSymbol.

Jumlah simbol dalam grup simbol dikembalikan oleh GetNumberSymbols. Indeks simbol dalam grup simbol adalah nomor identifikasi; indeks berkisar dari nol hingga jumlah simbol dikurangi satu. Setiap kali simbol ditambahkan ke atau dihapus dari grup simbol -- misalnya, dengan memperluas simbol -- indeks semua simbol dalam grup simbol dapat berubah.

Parameter simbol, termasuk informasi tentang hubungan induk-anak, dapat ditemukan dengan menggunakan GetSymbolParameters. Metode ini mengembalikan struktur DEBUG_SYMBOL_PARAMETERS .

Simbol dalam grup simbol dapat dicetak ke aliran output debugger menggunakan metode OutputSymbols.

Cakupan

Cakupan saat ini, atau konteks lokal saat ini, menentukan variabel lokal yang diekspos oleh mesin debugger. Cakupan memiliki tiga komponen:

  1. Bingkai tumpukan.

  2. Instruksi saat ini.

  3. Konteks register.

Jika bingkai tumpukan berada di bagian atas tumpukan panggilan, instruksi saat ini adalah instruksi yang menghasilkan peristiwa terakhir. Jika tidak, instruksi saat ini adalah panggilan fungsi yang menghasilkan bingkai tumpukan yang lebih tinggi berikutnya.

Metode GetScope dan SetScope dapat digunakan untuk mendapatkan dan mengatur cakupan saat ini. Saat peristiwa terjadi, cakupan saat ini diatur ke cakupan peristiwa. Cakupan saat ini dapat diatur ulang ke cakupan peristiwa terakhir menggunakan ResetScope.

Konteks Utas

Konteks utas adalah status yang dipertahankan oleh Windows saat beralih utas. Ini mirip dengan konteks register, kecuali bahwa ada beberapa status prosesor khusus kernel yang merupakan bagian dari konteks register tetapi bukan konteks utas. Status tambahan ini tersedia sebagai register selama debugging mode kernel.

Konteks utas diwakili oleh struktur CONTEXT yang ditentukan dalam ntddk.h. Struktur ini tergantung pada platform dan interpretasinya tergantung pada jenis prosesor yang efektif. Metode GetThreadContext dan SetThreadContext dapat digunakan untuk mendapatkan dan mengatur konteks utas.