Bagikan melalui


Penggunaan SymSrv Tingkat Lanjut

SymSrv dapat mengirimkan file simbol dari penyimpanan simbol terpusat. Penyimpanan ini dapat berisi sejumlah file simbol, yang sesuai dengan sejumlah program atau sistem operasi. Penyimpanan juga dapat berisi file biner (ini berguna saat men-debug minidump).

Penyimpanan dapat berisi simbol aktual dan file biner, atau hanya dapat berisi penunjuk ke file simbol. Jika penyimpanan berisi pointer, SymSrv akan mengambil file aktual langsung dari sumbernya.

SymSrv juga dapat digunakan untuk memisahkan penyimpanan simbol besar ke dalam subset yang lebih kecil yang sesuai untuk tugas penelusuran kesalahan khusus.

Terakhir, SymSrv dapat memperoleh file simbol dari sumber HTTP atau HTTPS menggunakan informasi masuk yang disediakan oleh sistem operasi. SymSrv mendukung situs HTTPS yang dilindungi oleh kartu pintar, sertifikat, dan login dan kata sandi reguler. Untuk informasi selengkapnya, lihat Penyimpanan Simbol HTTP.

Mengatur Jalur Simbol

Untuk menggunakan server simbol ini, symsrv.dll harus diinstal di direktori yang sama dengan debugger. Jalur simbol dapat diatur seperti yang ditunjukkan dalam kode ini:

set _NT_SYMBOL_PATH = symsrv*ServerDLL*DownstreamStore*\\Server\Share

set _NT_SYMBOL_PATH = symsrv*ServerDLL*\\Server\Share

set _NT_SYMBOL_PATH = srv*DownstreamStore*\\Server\Share

set _NT_SYMBOL_PATH = srv*\\Server\Share

Bagian sintaks ini dijelaskan sebagai berikut:

symsrv
Kata kunci ini harus selalu muncul terlebih dahulu. Ini menunjukkan kepada debugger bahwa item ini adalah server simbol, bukan hanya direktori simbol normal.

ServerDLL
Menentukan nama DLL server simbol. Jika Anda menggunakan server simbol SymSrv, ini akan selalu symsrv.dll.

srv
Ini singkatan dari symsrv*symsrv.dll.

DownstreamStore
Menentukan penyimpanan hilir. Ini adalah direktori lokal atau berbagi jaringan yang akan digunakan untuk menyimpan file simbol individual.

Anda dapat menentukan lebih dari satu penyimpanan hilir, dipisahkan oleh tanda bintang. Beberapa penyimpanan hilir dijelaskan di Penyimpanan Hilir Bercading lebih jauh di halaman ini.

Jika Anda menyertakan dua tanda bintang dalam baris di mana penyimpanan hilir biasanya akan ditentukan, maka penyimpanan hilir default digunakan. Penyimpanan ini akan terletak di subdirektori sym direktori rumah. Direktori beranda default ke direktori penginstalan debugger; ini dapat diubah dengan menggunakan ekstensi !homedir atau dengan mengatur variabel lingkungan DBGHELP_HOMEDIR.

Jika DownstreamStore menentukan direktori yang tidak ada, SymStore akan mencoba membuatnya.

Jika parameter DownstreamStore dihilangkan dan tidak ada tanda bintang tambahan yang disertakan -- dengan kata lain, jika Anda menggunakan srv dengan tepat satu tanda bintang atau symsrv dengan tepat dua tanda bintang -- maka tidak ada penyimpanan hilir yang akan dibuat. Debugger akan memuat semua file simbol langsung dari server, tanpa menyimpannya secara lokal.

Catatan Jika Anda mengakses simbol dari situs HTTP atau HTTPS, atau jika penyimpanan simbol menggunakan file terkompresi, penyimpanan hilir selalu digunakan. Jika tidak ada penyimpanan hilir yang ditentukan, penyimpanan akan dibuat di subdirektori sym direktori beranda.

\\Server\Share
Menentukan server dan berbagi penyimpanan simbol jarak jauh.

Jika penyimpanan hilir digunakan, debugger akan terlebih dahulu mencari file simbol di penyimpanan ini. Jika file simbol tidak ditemukan, debugger akan menemukan file simbol dari Server dan Bagikan yang ditentukan, lalu menyimpan salinan file ini di penyimpanan hilir. File akan disalin ke subdirektori di pohon di bawah DownstreamStore yang sesuai dengan lokasinya di pohon di bawah \\Server\Share.

Server simbol tidak harus menjadi satu-satunya entri dalam jalur simbol. Jika jalur simbol terdiri dari beberapa entri, debugger memeriksa setiap entri untuk file simbol yang diperlukan, secara berurutan (dari kiri ke kanan), terlepas dari apakah server simbol atau direktori aktual dinamai.

Berikut adalah beberapa contoh. Untuk menggunakan SymSrv sebagai server simbol dengan penyimpanan simbol pada \\mybuilds\mysymbols, atur jalur simbol berikut:

set _NT_SYMBOL_PATH= symsrv*symsrv.dll*\\mybuilds\mysymbols

Untuk mengatur jalur simbol sehingga debugger akan menyalin file simbol dari penyimpanan simbol pada \\mybuilds\mysymbols ke direktori lokal Anda c:\localsymbols, gunakan:

set _NT_SYMBOL_PATH=symsrv*symsrv.dll*c:\localsymbols*\\mybuilds\mysymbols

Untuk mengatur jalur simbol sehingga debugger akan menyalin file simbol dari situs https://www.company.com/manysymbols HTTPS ke direktori jaringan lokal \\localserver\myshare\mycache, gunakan:

set _NT_SYMBOL_PATH=symsrv*symsrv.dll*\\localserver\myshare\mycache*https://www.company.com/manysymbols

Contoh terakhir ini juga dapat dipersingkat seperti:

set _NT_SYMBOL_PATH=srv*\\localserver\myshare\mycache*https://www.company.com/manysymbols

Selain itu, jalur simbol dapat berisi beberapa direktori atau server simbol, dipisahkan oleh titik koma. Ini memungkinkan Anda menemukan simbol dari beberapa lokasi (atau bahkan beberapa server simbol). Jika biner memiliki file simbol yang tidak cocok, debugger tidak dapat menemukannya menggunakan server simbol karena hanya memeriksa parameter yang tepat. Namun, debugger mungkin menemukan file simbol yang tidak cocok dengan nama yang benar, menggunakan jalur simbol tradisional, dan berhasil memuatnya. Meskipun file secara teknis bukan file simbol yang benar, file tersebut mungkin memberikan informasi yang berguna.

Menghapus Cache

Jika Anda menggunakan DownstreamStore sebagai cache, Anda dapat menghapus direktori ini kapan saja untuk menghemat ruang disk.

Dimungkinkan untuk memiliki penyimpanan simbol luas yang mencakup file simbol untuk banyak program atau versi Windows yang berbeda. Jika Anda memutakhirkan versi Windows yang digunakan pada komputer target Anda, file simbol yang di-cache semuanya akan cocok dengan versi sebelumnya. File yang di-cache ini tidak akan digunakan lebih lanjut, dan oleh karena itu ini mungkin waktu yang tepat untuk menghapus cache.

Berskala Penyimpanan Hilir

Anda dapat menentukan sejumlah penyimpanan hilir, yang dipisahkan oleh tanda bintang. Toko-toko ini dikenal sebagai penyimpanan simbol berkaskala.

Setelah awal srv* atau symsrv*ServerDLL*, setiap token berikutnya mewakili lokasi simbol. Token terjauh kiri diperiksa terlebih dahulu. Token kosong -- yang ditunjukkan oleh dua tanda bintang berturut-turut, atau dengan tanda bintang di akhir string -- mewakili penyimpanan hilir default.

Berikut adalah contoh jalur simbol yang menggunakan dua penyimpanan hilir untuk menyimpan informasi dari penyimpanan simbol utama yang diakses. Ini dapat disebut penyimpanan master, penyimpanan tingkat menengah, dan cache lokal:

srv*c:\localcache*\\interim\store*https://msdl.microsoft.com/download/symbols

Dalam skenario ini, SymSrv akan terlebih dahulu melihat c:\localcache untuk file simbol. Jika ditemukan di sana, itu akan mengembalikan jalur ke sana. Jika tidak ditemukan di sana, itu akan terlihat di \\interim\store. Jika file simbol ditemukan di sana, SymSrv akan menyalinnya ke c:\localcache dan mengembalikan jalur. Jika tidak ditemukan di sana, SymSrv akan melihat di penyimpanan simbol publik Microsoft di ; jika file ditemukan di https://msdl.microsoft.com/download/symbolssana, SymSrv akan menyalinnya ke \\interim\store dan c:\localcache.

Perilaku serupa akan diperoleh dengan menggunakan jalur berikut:

srv**\\interim\store*https://internetsite

Dalam hal ini, cache lokal adalah penyimpanan hilir default dan penyimpanan master adalah situs internet. Penyimpanan tingkat menengah \\interim\store telah ditentukan untuk digunakan di antara dua toko lainnya.

Ketika SymSrv memproses jalur yang berisi penyimpanan berskala, SymSrv akan melewati penyimpanan apa pun yang tidak dapat dibaca atau ditulis. Jadi jika berbagi tidak berfungsi, berbagi akan menyalin file ke hilir penyimpanan dari penyimpanan yang hilang tanpa kesalahan. Efek samping yang bagus dari kesalahan ini adalah bahwa pengguna dapat menentukan lebih dari satu penyimpanan master yang memberi umpan satu aliran penyimpanan hilir selama penyimpanan master tidak dapat ditulis.

Ketika file simbol terkompresi diambil dari penyimpanan master, file tersebut akan disimpan dalam bentuk terkompresi di penyimpanan tingkat menengah apa pun. File tidak akan dikompresi di penyimpanan paling bawah di jalur.

Bekerja Dengan Jalur Server Simbol HTTP dan SMB

Seperti yang dibahas sebelumnya, penautan (atau berjenjang) mengacu pada salinan yang terjadi antara setiap pemisah "*" di jalur simbol. Simbol dicari dalam urutan kiri-ke-kanan. Pada setiap kesalahan, server simbol (upstream) berikutnya dikueri, hingga file ditemukan.

Jika ditemukan, file disalin dari server simbol (upstream) ke server simbol sebelumnya (hilir). Ini diulang untuk setiap server simbol (hilir). Dengan cara ini, server simbol hilir (bersama) diisi dengan upaya kolektif semua klien menggunakan server simbol.

Meskipun jalur UNC berantai dapat digunakan tanpa awalan SRV*, kami menyarankan agar SRV* ditentukan sehingga penanganan kesalahan lanjutan symsrv.dll digunakan.

Ketika menyertakan server simbol HTTP di jalur, hanya satu yang dapat ditentukan (per rantai), dan harus di akhir jalur (karena tidak dapat ditulis untuk berfungsi sebagai cache). Jika penyimpanan simbol berbasis HTTP terletak di tengah atau di sebelah kiri daftar penyimpanan, tidak mungkin untuk menyalin file yang ditemukan ke dalamnya dan rantai akan rusak. Selain itu, karena penangan simbol tidak dapat membuka file dari situs web, penyimpanan berbasis HTTP tidak boleh menjadi yang paling kiri atau hanya disimpan dalam daftar. Jika SymSrv pernah disajikan dengan jalur simbol ini, SymSrv akan mencoba memulihkan dengan menyalin file ke penyimpanan hilir default dan membukanya dari sana, terlepas dari apakah penyimpanan hilir default ditunjukkan di jalur simbol atau tidak.

HTTP hanya didukung saat menggunakan awalan SRV* (diimplementasikan oleh handler simbol symsrv.dll).

Contoh Skenario Server Simbol Berbagi HTTP dan SMB

Penyebaran umum khusus UNC melibatkan kantor pusat yang menghosting semua file (\\MainOffice\Symbols), kantor cabang yang menyimpan subset (\\BranchOfficeA\Symbols), dan desktop (C:\Symbols) yang menyimpan file yang mereka referensikan.

srv*C:\Symbols*\\BranchOfficeA\Symbols*\\MainOffice\Symbols

Ketika berbagi SMB adalah penyimpanan simbol utama (upstream), Baca diperlukan.

srv*C:\Symbols*\\MachineName\Symbols

Ketika berbagi SMB adalah penyimpanan simbol menengah (hilir), Baca/Ubah diperlukan. Klien akan menyalin file dari penyimpanan simbol utama ke berbagi SMB, lalu dari berbagi SMB ke folder lokal.

srv*C:\Symbols*\\MachineName\Symbols*https://msdl.microsoft.com/download/symbols
srv*C:\Symbols*\\MachineName\Symbols*\\MainOffice\Symbols

Ketika berbagi SMB adalah penyimpanan simbol menengah (hilir) dalam penyebaran SymProxy, hanya Baca yang diperlukan. Filter ISAPI SymProxy akan melakukan penulisan, bukan klien.

srv*C:\Symbols*\\MachineName\Symbols*https://SymProxyName/Symbols

Beberapa Skenario Cache Server Simbol Berbagi HTTP dan SMB

Dimungkinkan untuk menentukan beberapa rantai server simbol dan lokasi cache, dipisahkan oleh titik koma ";". Jika simbol terletak di rantai pertama, rantai kedua tidak dilalui. Jika simbol tidak terletak di rantai pertama, rantai kedua akan dilalui dan jika simbol terletak di rantai kedua, simbol tersebut akan di-cache di lokasi yang ditentukan. Pendekatan ini akan memungkinkan server simbol utama untuk biasanya digunakan, dengan server sekunder hanya digunakan, jika simbol tidak tersedia di server simbol utama yang ditentukan dalam rantai pertama.

srv*C:\Symbols*\\Machine1\Symbols*https://SymProxyName/Symbols;srv*C:\WebSymbols*https://msdl.microsoft.com/download/symbols

cache*localsymbolcache

Cara lain untuk membuat cache simbol lokal adalah dengan menggunakan cache*localsymbolcache string di jalur simbol Anda. Ini bukan bagian dari elemen server simbol, tetapi elemen terpisah di jalur simbol Anda. Debugger akan menggunakan direktori yang ditentukan localsymbolcache untuk menyimpan simbol apa pun yang dimuat dari elemen apa pun yang muncul di jalur simbol Anda di sebelah kanan string ini. Ini memungkinkan Anda untuk menggunakan cache lokal untuk simbol yang diunduh dari lokasi mana pun, bukan hanya yang diunduh oleh server simbol.

Misalnya, jalur simbol berikut tidak akan menyimpan simbol yang diambil dari \\someshare. Ini akan menggunakan c:\mysymbols untuk simbol cache yang diambil dari \\anothershare, karena elemen yang dimulai dengan \\anothershare muncul di sebelah kanan elemen cache*c:\mysymbols . Ini juga akan menggunakan c:\mysymbols untuk menyimpan simbol yang diambil dari penyimpanan simbol publik Microsoft, karena sintaks biasa yang digunakan oleh server simbol (srv dengan dua tanda bintang atau lebih). Selain itu, jika Anda kemudian menggunakan perintah .sympath+ untuk menambahkan lokasi tambahan ke jalur ini, elemen baru ini juga akan di-cache, karena akan ditambahkan ke sisi kanan jalur.

_NT_SYMBOL_PATH=\\someshare\that\cachestar\ignores;srv*c:\mysymbols*https://msdl.microsoft.com/download/symbols;cache*c:\mysymbols;\\anothershare\that\gets\cached

Cara SymSrv Menemukan File

SymSrv membuat jalur UNC yang sepenuhnya memenuhi syarat ke file simbol yang diinginkan. Jalur ini dimulai dengan jalur ke penyimpanan simbol yang direkam dalam variabel lingkungan _NT_SYMBOL_PATH. Rutinitas SymbolServer kemudian digunakan untuk mengidentifikasi nama file yang diinginkan; nama ini ditambahkan ke jalur sebagai nama direktori. Nama direktori lain, yang terdiri dari perangkaian parameter id, dua, dan tiga yang diteruskan ke SymbolServer, kemudian ditambahkan. Jika salah satu dari nilai ini adalah nol, nilai tersebut akan dihilangkan.

Direktori yang dihasilkan dicari untuk file simbol, atau file penunjuk penyimpanan simbol.

Jika pencarian ini berhasil, SymbolServer meneruskan jalur ke pemanggil dan mengembalikan TRUE. Jika file tidak ditemukan, SymbolServer mengembalikan FALSE.

Menggunakan AgeStore untuk Mengurangi Ukuran Cache

Alat AgeStore dapat digunakan untuk menghapus file cache yang lebih lama dari tanggal yang ditentukan, atau untuk mengurangi konten cache di bawah ukuran yang ditentukan. Ini dapat berguna jika penyimpanan hilir Anda terlalu besar. Untuk detailnya, lihat AgeStore.