Bagikan melalui


Jalur simbol untuk debugger Windows

Jalur simbol menentukan lokasi di mana debugger Windows seperti WinDbg, KD, CDB, dan NTST mencari file simbol.

Memulai dengan cepat: Gunakan perintah .symfix untuk menyiapkan jalur bawaan ke server simbol publik Microsoft—ini berfungsi dengan baik di sebagian besar skenario debug.

Konfigurasikan jalur simbol dengan benar untuk mengaktifkan penelusuran kesalahan yang efisien—debugger kemudian dapat secara otomatis menemukan dan memuat file simbol yang diperlukan untuk menganalisis eksekusi kode. Panduan ini menunjukkan kepada Anda cara menyiapkan jalur simbol, menggunakan server simbol Microsoft, simbol cache secara lokal, dan memecahkan masalah umum. Untuk informasi selengkapnya tentang simbol dan file simbol, lihat simbol .

Beberapa pengkompilasi, termasuk Microsoft Visual Studio, menempatkan file simbol di direktori yang sama dengan file biner. File simbol dan file biner yang diperiksa berisi jalur dan informasi nama file, yang memungkinkan debugger menemukan file simbol secara otomatis. Jika Anda men-debug proses mode pengguna di komputer tempat Anda membangun file yang dapat dieksekusi, dan jika file simbol berada di lokasi aslinya, debugger dapat menemukan file simbol tanpa Anda mengatur jalur simbol.

Dalam sebagian besar situasi lainnya, Anda perlu mengatur jalur simbol untuk menunjuk ke lokasi file simbol Anda.

Tips

Gunakan .symfix untuk mengatur jalur default ke server simbol publik Microsoft publik yang berfungsi dengan baik dalam banyak situasi.

Sintaks jalur simbol

Jalur simbol debugger adalah string yang terdiri dari beberapa jalur direktori yang dipisahkan oleh titik koma. Misalnya, C:\Dir1;C:\Dir2\DirA;C:\Dir2\DirB.

Jalur relatif didukung. Namun, Anda harus menambahkan huruf drive atau path jaringan sebelum setiap path, kecuali Anda selalu menjalankan debugger dari direktori yang sama. Berbagi jaringan juga didukung.

Untuk setiap direktori di jalur simbol, debugger mencari di tiga direktori. Misalnya, jika jalur simbol menyertakan C:\Dir1 dan debugger mencari informasi simbol untuk DLL, debugger mencari dalam urutan ini:

  1. C:\Dir1\symbols\dll
  2. C:\Dir1\dll
  3. C:\Dir1

Debugger mengulangi proses ini untuk setiap direktori di jalur simbol.

Lokasi cadangan akhir:

  • Direktori saat ini
  • Direktori saat ini dengan ..\dll, ..\exe, atau ..\sys ditambahkan (tergantung pada jenis biner yang sedang di-debug)

File simbol memiliki stempel tanggal dan waktu. Debugger selalu mencari simbol yang cocok dengan stempel waktu pada file biner yang di-debug. Anda tidak perlu khawatir bahwa debugger menggunakan simbol yang salah yang ditemukan pertama kali dalam urutan ini. Untuk informasi selengkapnya tentang respons saat file simbol tidak tersedia, lihat Mencocokkan nama simbol.

Salah satu cara untuk mengatur jalur simbol adalah dengan memasukkan perintah .sympath. Untuk cara lain untuk mengatur jalur simbol, lihat Mengontrol jalur simbol nanti dalam topik ini.

Mengontrol jalur simbol

Untuk mengontrol jalur simbol, pilih salah satu metode berikut:

  • Gunakan perintah .symfix set jalur penyimpanan simbol untuk mengatur jalur default ke server simbol Microsoft publik yang berfungsi dengan baik dalam banyak situasi. Untuk mengatur cache lokal, ketik .symfix C:\MyCache.

  • Gunakan perintah .sympath untuk menampilkan, mengatur, mengubah, atau menambahkan ke jalur.

  • Sebelum Anda memulai debugger, gunakan variabel lingkungan _NT_SYMBOL_PATH dan _NT_ALT_SYMBOL_PATH untuk mengatur jalur. Jalur simbol dibuat dengan menambahkan _NT_SYMBOL_PATH setelah _NT_ALT_SYMBOL_PATH. Biasanya, Anda mengatur jalur melalui _NT_SYMBOL_PATH. Namun, Anda mungkin ingin menggunakan _NT_ALT_SYMBOL_PATH untuk mengambil alih pengaturan ini dalam kasus khusus, seperti jika Anda memiliki versi privat file simbol bersama. Jika Anda mencoba menambahkan direktori yang tidak valid melalui variabel lingkungan ini, debugger mengabaikan direktori ini.

  • Saat Anda memulai debugger, gunakan opsi baris perintah -y untuk mengatur jalur.

  • Hanya di WinDbg, gunakan File | Symbol File Path atau tekan CTRL+S untuk menampilkan, mengatur, mengubah, atau menambahkan ke jalur.

Jika Anda menggunakan opsi baris perintah -sins, debugger akan mengabaikan variabel lingkungan jalur simbol.

Menyimpan simbol cache secara lokal

Sebaiknya cache simbol secara lokal untuk meningkatkan performa debugger dan mengurangi lalu lintas jaringan. Untuk menyimpan simbol, sertakan cache*; atau cache*localsymbolcache; di jalur simbol Anda.

Jika Anda menyertakan string cache*; di jalur simbol Anda, debugger menyimpan simbol yang dimuatnya dari elemen apa pun yang muncul di sebelah kanan string ini di direktori cache simbol default di komputer lokal. Misalnya, perintah berikut memberi tahu debugger untuk mendapatkan simbol dari berbagi jaringan bernama \\someshare dan menyimpan simbol di lokasi default di komputer lokal.

.sympath cache*;\\someshare

Jika Anda menyertakan string cache*localsymbolcache; di jalur simbol Anda, debugger menyimpan simbol yang dimuatnya dari elemen apa pun yang muncul di sebelah kanan string ini di direktori localsymbolcache .

Misalnya, perintah berikut memberi tahu debugger untuk mengambil simbol dari share jaringan \\someshare dan menyimpan simbol tersebut di direktori c:\MySymbols.

.sympath cache*C:\MySymbols;\\someshare

Menggunakan server simbol: srv*

Jika Anda terhubung ke Internet atau jaringan perusahaan, cara paling efisien untuk mengakses simbol adalah dengan menggunakan server simbol seperti publik server simbol publik Microsoft. Anda dapat menggunakan server simbol dengan menggunakan salah satu string berikut di jalur simbol Anda.

  • String srv*

    Jika Anda menyertakan string srv* di jalur simbol Anda, debugger menggunakan server simbol untuk mendapatkan simbol dari penyimpanan simbol default. Misalnya, perintah berikut menginstruksikan debugger agar mendapatkan simbol dari toko simbol default. Simbol-simbol ini tidak di-cache di komputer lokal.

    .sympath srv*
    
  • String srv*symbolstore

    Jika Anda menyertakan string srv*symbolstore di jalur simbol Anda, debugger menggunakan server simbol untuk mendapatkan simbol dari symbolstore. Misalnya, perintah berikut memberi tahu debugger untuk mendapatkan simbol dari server simbol Microsoft store. Simbol-simbol ini tidak di-cache di komputer lokal.

    .sympath srv*https://msdl.microsoft.com/download/symbols
    
  • String srv*localsymbolcache*symbolstore

    Jika Anda menyertakan string di jalur simbol Anda, debugger menggunakan server simbol untuk mendapatkan simbol dari penyimpan simbol dan menyimpannya di direktori localcache. Misalnya, perintah berikut memberi tahu debugger untuk mendapatkan simbol dari server simbol Microsoft -https://msdl.microsoft.com/download/symbols dan menyimpan simbol di c:\MyServerSymbols.

    .sympath srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
    

Jika Anda memiliki direktori di komputer tempat Anda menempatkan simbol secara manual, jangan gunakan direktori tersebut sebagai cache untuk simbol yang diperoleh dari server simbol. Sebagai gantinya, gunakan dua direktori terpisah. Misalnya, Anda dapat menempatkan simbol secara manual di c:\MyRegularSymbols lalu menunjuk c:\MyServerSymbols sebagai cache untuk simbol yang diperoleh dari server. Contoh berikut menunjukkan cara menentukan kedua direktori pada jalur simbol milik Anda.

.sympath C:\MyRegularSymbols;srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols

Untuk informasi selengkapnya tentang server simbol dan penyimpanan simbol, lihat Penyimpanan simbol kustom dan server simbol.

Gabungkan cache* dan srv*

Jika Anda menyertakan string cache*; di jalur simbol Anda, debugger menyimpan simbol yang dimuatnya dari elemen apa pun yang muncul di sebelah kanan string ini di direktori cache simbol default di komputer lokal. Misalnya, perintah berikut memberi tahu debugger untuk mengambil simbol dari server simbol Microsoft dan menyimpannya di direktori cache simbol default.

.sympath cache*;srv*https://msdl.microsoft.com/download/symbols

Jika Anda menyertakan string cache*localsymbolcache; di jalur simbol Anda, debugger menyimpan simbol yang dimuatnya dari elemen apa pun yang muncul di sebelah kanan string ini di direktori localsymbolcache .

Misalnya, perintah berikut memberi tahu debugger untuk mendapatkan simbol dari server simbol Microsoft menyimpan dan menyimpan simbol di direktori c:\MySymbols.

.sympath cache*C:\MySymbols;srv*https://msdl.microsoft.com/download/symbols

Menggunakan AgeStore untuk mengurangi ukuran cache

Anda dapat menggunakan alat AgeStore untuk menghapus file cache yang lebih lama dari tanggal yang ditentukan, atau untuk menghapus file lama yang cukup sehingga ukuran cache yang dihasilkan kurang dari jumlah yang ditentukan. Pembersihan file cache ini berguna jika penyimpanan hilir Anda terlalu besar.

Pemuatan simbol secara malas

Debugger menggunakan pemuatan simbol tunda secara default. Pemuatan semacam ini berarti debugger tidak memuat simbol sampai membutuhkannya.

Saat Anda mengubah jalur simbol, misalnya dengan menggunakan perintah .sympath, debugger secara lambat memuat ulang semua modul yang telah dimuat dengan simbol ekspor.

Debugger dengan malas memuat ulang simbol modul dengan simbol PDB penuh jika jalur baru tidak lagi menyertakan jalur asli yang digunakan untuk memuat simbol PDB. Jika jalur baru masih menyertakan jalur asli ke file simbol PDB, debugger tidak memuat ulang simbol tersebut secara otomatis.

Anda dapat menonaktifkan pemuatan simbol lambat di CDB dan KD dengan menggunakan opsi baris perintah -s. Anda juga dapat memaksa pemuatan simbol dengan menggunakan perintah ld load symbols atau dengan menggunakan perintah modul .reload bersama dengan opsi /f.

Artefak Layanan Azure DevOps

Server simbol tersedia dengan Artefak Azure di Azure DevOps Services. Untuk mempelajari tentang menggunakan Artefak Azure di WinDbg, lihat melakukan debugging dengan simbol di WinDbg (Artefak Azure). Untuk informasi umum tentang simbol yang dihasilkan Azure, lihat gambaran umum Simbol (Azure Artifacts).

Pemecahan masalah

Gunakan !sym noisy atau opsi -nWinDbg Command-Line untuk menampilkan detail tambahan saat simbol dimuat. Untuk strategi pemecahan masalah tambahan, lihat Memverifikasi Simbol.

Langkah selanjutnya

Sekarang setelah Anda mengonfigurasi jalur simbol, pelajari cara memverifikasi bahwa simbol dimuat dengan benar dan memecahkan masalah umum:

Tugas terkait:

Referensi perintah: