Jalur Simbol
Pustaka DbgHelp menggunakan jalur pencarian simbol untuk menemukan simbol debug (file .pdb dan .dbg). Jalur pencarian dapat terdiri dari satu atau beberapa elemen jalur yang dipisahkan oleh titik koma.
Menentukan Jalur Pencarian
Untuk menentukan di mana handler simbol akan mencari direktori disk untuk file simbol, panggil fungsiSymSetSearchPath. Atau, Anda dapat menentukan jalur pencarian simbol di parameter UserSearchPath fungsi SymInitialize.
Parameter UserSearchPath di SymInitialize dan parameter SearchPath di SymSetSearchPath mengambil penunjuk ke string yang dihentikan null yang menentukan jalur, atau serangkaian jalur yang dipisahkan oleh titik koma. Penangan simbol menggunakan jalur ini untuk mencari file simbol. Jika parameter ini NULL, penangan simbol mencari direktori yang berisi modul tempat simbol sedang dicari. Jika tidak, jika parameter ini ditentukan sebagai nilaiNULL non-, penangan simbol terlebih dahulu mencari jalur yang ditetapkan oleh aplikasi sebelum mencari direktori modul. Jika Anda mengatur variabel lingkungan _NT_SYMBOL_PATH atau _NT_ALT_SYMBOL_PATH, penangan simbol mencari file simbol dalam urutan berikut:
- Variabel lingkungan _NT_SYMBOL_PATH.
- Variabel lingkungan _NT_ALT_SYMBOL_PATH.
- Direktori yang berisi modul yang sesuai.
Untuk mengambil jalur pencarian, panggil fungsiSymGetSearchPath.
Jalur pencarian untuk file database program (.pdb) berbeda dari jalur untuk file debug (.dbg). Algoritma ditentukan oleh fungsionalitas pustaka simbol. Secara default, Microsoft Visual C/C++ membuat simbol format Microsoft, menghapusnya dari gambar, dan menempatkannya dalam file .pdb terpisah. Biasanya, file .pdb akan terletak di direktori yang berisi gambar yang dapat dieksekusi. Visual C/C++ menyematkan jalur absolut ke file .pdb dalam gambar yang dapat dieksekusi. Jika penangan simbol tidak dapat menemukan file .pdb di lokasi tersebut atau jika file .pdb dipindahkan ke direktori lain, penangan simbol akan menemukan file .pdb menggunakan jalur pencarian yang dijelaskan untuk file .dbg.
Jenis Elemen Jalur
Ada tiga jenis elemen jalur.
Elemen Jalur Standar
Elemen jalur standar dicari dengan melihat di akar direktori yang ditentukan oleh elemen jalur. Penangan simbol juga terlihat dalam subdirektori "simbol" yang cocok dengan ekstensi file modul yang sedang dicari simbol. Ini biasanya "dll", "exe", atau "sys". Terakhir, terlihat di subdirektori yang disebut "simbol" dengan direktori dengan nama yang sama dengan ekstensi. Misalnya, jika elemen jalur simbol adalah "c:\mySymbols" dan file yang sedang dicari simbol adalah "boo.dll", maka direktori berikut akan dicari.
- c:\mySymbols
- c:\mySymbols\dll
- c:\mySymbols\symbols\dll
Penangan simbol menggunakan logika ini untuk mencari elemen jalur apa pun yang tidak memenuhi kriteria untuk menjadi server simbol atau cache (dijelaskan di bawah).
Elemen Jalur Server Simbol
Elemen jalur server simbol menggunakan teknologi khusus yang dapat menemukan simbol yang sama persis dengan modul yang dimaksud. Lihat Menggunakan SymSrv untuk detail selengkapnya.
Handler simbol memperlakukan elemen jalur sebagai server simbol jika dimulai dengan teks, "srv*".
Nota
Jika teks "srv*" tidak ditentukan tetapi elemen jalur aktual adalah penyimpanan server simbol, maka penangan simbol akan bertindak seolah-olah "srv*" ditentukan. Penangan simbol membuat penentuan ini dengan mencari keberadaan file yang disebut "pingme.txt" di direktori akar dari jalur yang ditentukan.
Elemen Jalur Cache
Elemen jalur cache adalah variasi pada elemen jalur server simbol.
Direktori ini dicari seperti server simbol lainnya. Namun, jika simbol tidak ditemukan di sini dan ditemukan di elemen jalur lebih jauh ke rantai jalur simbol, maka simbol akan disalin dan disimpan di server simbol yang ditentukan dalam elemen ini.
Penangan simbol memperlakukan elemen jalur sebagai elemen cache jika dimulai dengan teks, "cache*". Untuk menentukan cache di "c:\myCache", gunakan elemen jalur simbol "cache*c:\myCache".
Contoh Jalur Pencarian
Untuk melihat cara kerjanya, atur jalur pencarian ini.
cache*c:\myCache;srv*\\symbols\symbols
Berikut ini adalah daftar output verbose handler simbol saat mencari ntdll.pdb, menggunakan jalur pencarian yang tercantum di atas.
DBGHELP: .\ntdll.pdb - file not found
DBGHELP: .\dll\ntdll.pdb - file not found
DBGHELP: .\symbols\dll\ntdll.pdb - file not found
SYMSRV: c:\myCache\ntdll.pdb\0F7FCF88442F4B0E9FB51DC4A754D9DE2\ntdll.pdb not found
SYMSRV: ntdll.pdb from \\symbols\symbols: 10497024 bytes - copied
DBGHELP: c:\myCache\ntdll.pdb\0F7FCF88442F4B0E9FB51DC4A754D9DE2\ntdll.pdb already cached
DBGHELP: ntdll - private symbols & lines
c:\myCache\ntdll.pdb\0F7FCF88442F4B0E9FB51DC4A754D9DE2\ntdll.pdb
Tiga baris output pertama menunjukkan handler simbol yang memproses elemen jalur pertama .
. Ini adalah elemen jalur standar.
Baris keempat menunjukkan handler simbol menggunakan server simbol untuk mencari file di elemen jalur kedua cache*c:\myCache
yang merupakan elemen jalur cache.
Baris kelima menunjukkan file ditemukan di elemen jalur ketiga srv*\\symbols\symbols
, yang merupakan elemen jalur server simbol.
Baris keenam menunjukkan bahwa file disalin ke cache.
Dua baris terakhir yang dibuka file dari cache.