Bagikan melalui


Menggunakan SymStore

SymStore (symstore.exe) adalah alat untuk membuat penyimpanan simbol. Ini disertakan dalam paket Alat Penelusuran Kesalahan untuk Windows .

SymStore menyimpan simbol dalam format yang memungkinkan debugger mencari simbol berdasarkan stempel waktu dan ukuran gambar (untuk file .dbg atau dapat dieksekusi), atau tanda tangan dan usia (untuk file .pdb). Keuntungan dari penyimpanan simbol atas format penyimpanan simbol tradisional adalah bahwa semua simbol dapat disimpan atau direferensikan di server yang sama dan diambil oleh debugger tanpa pengetahuan sebelumnya tentang produk mana yang berisi simbol yang sesuai.

Perhatikan bahwa beberapa versi file simbol .pdb (misalnya, versi publik dan privat) tidak dapat disimpan di server yang sama, karena masing-masing berisi tanda tangan dan usia yang sama.

Transaksi SymStore

Setiap panggilan ke SymStore dicatat sebagai transaksi. Ada dua jenis transaksi: tambahkan dan hapus.

Ketika penyimpanan simbol dibuat, direktori, yang disebut "000admin", dibuat di bawah akar server. Direktori 000admin berisi satu file untuk setiap transaksi, serta file log Server.txt dan History.txt. File Server.txt berisi daftar semua transaksi yang saat ini ada di server. File History.txt berisi riwayat kronologis semua transaksi.

Setiap kali SymStore menyimpan atau menghapus file simbol, nomor transaksi baru dibuat. Kemudian, file, yang namanya adalah nomor transaksi ini, dibuat dalam 000admin. File ini berisi daftar semua file atau penunjuk yang telah ditambahkan ke penyimpanan simbol selama transaksi ini. Jika transaksi dihapus, SymStore akan membaca file transaksinya untuk menentukan file dan pointer mana yang harus dihapus.

Opsi tambahkan dan del menentukan apakah transaksi tambahkan atau hapus akan dilakukan. Termasuk opsi /p dengan operasi tambahkan menentukan bahwa penunjuk akan ditambahkan; menghilangkan opsi /p menentukan bahwa file simbol aktual akan ditambahkan.

Anda juga dapat membuat penyimpanan simbol dalam dua tahap terpisah. Pada tahap pertama, Anda menggunakan SymStore dengan opsi /x untuk membuat file indeks. Pada tahap kedua, Anda menggunakan SymStore dengan opsi /y untuk membuat penyimpanan file atau pointer aktual dari informasi dalam file indeks.

Ini bisa menjadi teknik yang berguna karena berbagai alasan. Misalnya, ini memungkinkan penyimpanan simbol untuk dibuat ulang dengan mudah jika penyimpanan entah bagaimana hilang, selama file indeks masih ada. Atau mungkin komputer yang berisi file simbol memiliki koneksi jaringan lambat ke komputer tempat penyimpanan simbol akan dibuat. Dalam hal ini, Anda dapat membuat file indeks pada komputer yang sama dengan file simbol, mentransfer file indeks ke komputer kedua, lalu membuat penyimpanan di komputer kedua.

Untuk daftar lengkap semua parameter SymStore, lihat Opsi Baris Perintah SymStore.

Catatan

SymStore tidak mendukung transaksi simultan dari beberapa pengguna. Disarankan agar satu pengguna ditunjuk sebagai "administrator" dari penyimpanan simbol dan bertanggung jawab atas semua transaksi tambah dan del .

 

Contoh Transaksi

Berikut adalah dua contoh SymStore menambahkan pointer simbol untuk build 3790 Windows Server 2003 ke \\sampledir\symsrv:

symstore add /r /p /f \\BuildServer\BuildShare\3790free\symbols\*.*
   /s \\sampledir\symsrv /t "Windows Server 2003" /v "Build 3790 x86 free"
   /c "Sample add"
symstore add /r /p /f \\BuildServer\BuildShare\3790Chk\symbols\*.* 
   /s \\sampledir\symsrv /t "Windows Server 2003" /v "Build 3790 x86 checked"
   /c "Sample add"

Dalam contoh berikut, SymStore menambahkan file simbol aktual untuk proyek aplikasi di \\largeapp\appserver\bins ke \\testdir\symsrv:

symstore add /r /f \\largeapp\appserver\bins\*.* /s \\testdir\symsrv 
   /t "Large Application" /v "Build 432" /c "Sample add"

Berikut adalah contoh bagaimana file indeks digunakan. Pertama, SymStore membuat file indeks berdasarkan kumpulan file simbol di \\largeapp\appserver\bins\. Dalam hal ini, file indeks ditempatkan di komputer ketiga, \\hubserver\hubshare. Anda menggunakan opsi /g untuk menentukan bahwa awalan file "\\largeapp\appserver" mungkin berubah di masa mendatang:

symstore add /r /p /g \\largeapp\appserver /f 
   \\largeapp\appserver\bins\*.* 
   /x \\hubserver\hubshare\myindex.txt

Sekarang misalkan Anda memindahkan semua file simbol dari komputer \\largeapp\appserver dan menempatkannya di \\myarchive\appserver. Anda kemudian dapat membuat penyimpanan simbol itu sendiri dari file indeks \\hubserver\hubshare\myindex.txt sebagai berikut:

symstore add /y \\hubserver\hubshare\myindex.txt 
   /g \\myarchive\appserver /s \\sampledir\symsrv /p 
   /t "Large Application" /v "Build 432" /c "Sample Add from Index"

Terakhir, berikut adalah contoh SymStore yang menghapus file yang ditambahkan oleh transaksi sebelumnya. Lihat bagian berikut untuk penjelasan tentang cara menentukan ID transaksi (dalam hal ini, 0000000096).

symstore del /i 0000000096 /s \\sampledir\symsrv

File Terkompresi

SymStore dapat digunakan dengan file terkompresi dengan dua cara berbeda.

  1. Gunakan SymStore dengan opsi /p untuk menyimpan pointer ke file simbol. Setelah SymStore selesai, kompres file yang dirujuk penunjuk.
  2. Gunakan SymStore dengan opsi /x untuk membuat file indeks. Setelah SymStore selesai, kompres file yang tercantum dalam file indeks. Kemudian gunakan SymStore dengan opsi /y (dan, jika Anda mau, opsi /p ) untuk menyimpan file atau pointer ke file di penyimpanan simbol. (SymStore tidak perlu membongkar file untuk melakukan operasi ini.)

Server simbol Anda akan bertanggung jawab untuk menghapus kompresi file ketika diperlukan.

Jika Anda menggunakan SymSrv sebagai server simbol Anda, kompresi apa pun harus dilakukan menggunakan alat compress.exe yang didistribusikan dengan Microsoft Windows Software Development Kit (SDK). File terkompresi harus memiliki garis bawah sebagai karakter terakhir dalam ekstensi file mereka (misalnya, module1.pd_ atau module2.db_). Untuk detailnya, lihat Menggunakan SymSrv.

File server.txt dan history.txt

Saat transaksi ditambahkan, beberapa item informasi ditambahkan ke server.txt dan history.txt untuk kemampuan pencarian di masa mendatang. Berikut ini adalah contoh baris di server.txt dan history.txt untuk transaksi penambahan:

0000000096,add,ptr,10/09/99,00:08:32,Windows XP,x86 fre 1.156c-RTM-2,Added from \\mybuilds\symbols,

Ini adalah baris yang dipisahkan koma. Bidang didefinisikan sebagai berikut.

Bidang Deskripsi
0000000096 Nomor ID Transaksi, seperti yang dibuat oleh SymStore.
tambahkan Jenis transaksi. Bidang ini dapat berupa tambahkan atau del.
ptr Apakah berkas atau penunjuk ditambahkan. Bidang ini dapat berupa file atau ptr.
10/09/99 Tanggal ketika transaksi terjadi.
00:08:32 Waktu ketika transaksi dimulai.
Windows XP Produk.
x86 fre Versi (opsional).
Ditambahkan dari Komentar (opsional)
Tidak digunakan (Dicadangkan untuk digunakan nanti.)

 

Berikut adalah beberapa baris sampel dari file transaksi 0000000096. Setiap baris merekam direktori dan lokasi file atau penunjuk yang ditambahkan ke direktori.

canon800.dbg\35d9fd51b000,\\mybuilds\symbols\sp4\dll\canon800.dbg
canonlbp.dbg\35d9fd521c000,\\mybuilds\symbols\sp4\dll\canonlbp.dbg
certadm.dbg\352bf2f48000,\\mybuilds\symbols\sp4\dll\certadm.dbg
certcli.dbg\352bf2f1b000,\\mybuilds\symbols\sp4\dll\certcli.dbg
certcrpt.dbg\352bf04911000,\\mybuilds\symbols\sp4\dll\certcrpt.dbg
certenc.dbg\352bf2f7f000,\\mybuilds\symbols\sp4\dll\certenc.dbg

Jika Anda menggunakan transaksi del untuk membatalkan transaksi penambahan asli, baris ini akan dihapus dari server.txt, dan baris berikut akan ditambahkan ke history.txt:

0000000105,del,0000000096

Bidang untuk transaksi penghapusan didefinisikan sebagai berikut.

Bidang Deskripsi
0000000105 Nomor ID Transaksi, seperti yang dibuat oleh SymStore.
del Jenis transaksi. Bidang ini dapat berupa tambahkan atau del.
0000000096 Transaksi yang dihapus.

 

Format Penyimpanan Simbol

SymStore menggunakan sistem file itu sendiri sebagai database. Ini membuat pohon direktori besar, dengan nama direktori berdasarkan hal-hal seperti stempel waktu file simbol, tanda tangan, usia, dan data lainnya.

Misalnya, setelah beberapa file acpi.dbg yang berbeda ditambahkan ke server, direktori bisa terlihat seperti ini:

Directory of \\mybuilds\symsrv\acpi.dbg
10/06/1999  05:46p      <DIR>          .
10/06/1999  05:46p      <DIR>          ..
10/04/1999  01:54p      <DIR>          37cdb03962040
10/04/1999  01:49p      <DIR>          37cdb04027740
10/04/1999  12:56p      <DIR>          37e3eb1c62060
10/04/1999  12:51p      <DIR>          37e3ebcc27760
10/04/1999  12:45p      <DIR>          37ed151662060
10/04/1999  12:39p      <DIR>          37ed15dd27760
10/04/1999  11:33a      <DIR>          37f03ce962020
10/04/1999  11:21a      <DIR>          37f03cf7277c0
10/06/1999  05:38p      <DIR>          37fa7f00277e0
10/06/1999  05:46p      <DIR>          37fa7f01620a0

Dalam contoh ini, jalur pencarian untuk file simbol acpi.dbg mungkin terlihat seperti ini: \\mybuilds\symsrv\acpi.dbg\37cdb03962040.

Tiga file mungkin ada di dalam direktori pencarian:

  1. Jika file disimpan, maka acpi.dbg akan ada di sana.
  2. Jika pointer disimpan, maka file yang disebut file.ptr akan ada dan berisi jalur ke file simbol aktual.
  3. File bernama refs.ptr, yang berisi daftar semua lokasi saat ini untuk acpi.dbg dengan tanda waktu dan ukuran gambar ini yang saat ini ditambahkan ke penyimpanan simbol.

Menampilkan daftar direktori \\mybuilds\symsrv\acpi.dbg\37cdb03962040 memberikan hal berikut:

10/04/1999  01:54p                  52 file.ptr
10/04/1999  01:54p                  67 refs.ptr

File file.ptr berisi string teks "\\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg". Karena tidak ada file yang disebut acpi.dbg dalam direktori ini, debugger akan mencoba menemukan file di \\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg.

Konten refs.ptr hanya digunakan oleh SymStore, bukan debugger. File ini berisi catatan semua transaksi yang telah terjadi di direktori ini. Baris sampel dari refs.ptr mungkin:

0000000026,ptr,\\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg

Ini menunjukkan bahwa penunjuk ke \\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg ditambahkan dengan transaksi "0000000026".

Beberapa file simbol tetap konstan melalui berbagai produk atau build atau produk tertentu. Salah satu contohnya adalah file msvcrt.pdb. Melakukan direktori \\mybuilds\symsrv\msvcrt.pdb menunjukkan bahwa hanya dua versi msvcrt.pdb yang telah ditambahkan ke server simbol:

Directory of \\mybuilds\symsrv\msvcrt.pdb
10/06/1999  05:37p      <DIR>          .
10/06/1999  05:37p      <DIR>          ..
10/04/1999  11:19a      <DIR>          37a8f40e2
10/06/1999  05:37p      <DIR>          37f2c2272

Namun, melakukan direktori \\mybuilds\symsrv\msvcrt.pdb\37a8f40e2 menunjukkan bahwa refs.ptr memiliki beberapa pointer di dalamnya.

Directory of \\mybuilds\symsrv\msvcrt.pdb\37a8f40e2
10/05/1999  02:50p              54     file.ptr
10/05/1999  02:50p           2,039     refs.ptr

Isi \\mybuilds\symsrv\msvcrt.pdb\37a8f40e2\refs.ptr adalah sebagai berikut:

0000000001,ptr,\\mybuilds\symbols\x86\2137\symbols\dll\msvcrt.pdb
0000000002,ptr,\\mybuilds\symbols\x86\2137.chk\symbols\dll\msvcrt.pdb
0000000003,ptr,\\mybuilds\symbols\x86\2138\symbols\dll\msvcrt.pdb
0000000004,ptr,\\mybuilds\symbols\x86\2138.chk\symbols\dll\msvcrt.pdb
0000000005,ptr,\\mybuilds\symbols\x86\2139\symbols\dll\msvcrt.pdb
0000000006,ptr,\\mybuilds\symbols\x86\2139.chk\symbols\dll\msvcrt.pdb
0000000007,ptr,\\mybuilds\symbols\x86\2140\symbols\dll\msvcrt.pdb
0000000008,ptr,\\mybuilds\symbols\x86\2140.chk\symbols\dll\msvcrt.pdb
0000000009,ptr,\\mybuilds\symbols\x86\2136\symbols\dll\msvcrt.pdb
0000000010,ptr,\\mybuilds\symbols\x86\2136.chk\symbols\dll\msvcrt.pdb
0000000011,ptr,\\mybuilds\symbols\x86\2135\symbols\dll\msvcrt.pdb
0000000012,ptr,\\mybuilds\symbols\x86\2135.chk\symbols\dll\msvcrt.pdb
0000000013,ptr,\\mybuilds\symbols\x86\2134\symbols\dll\msvcrt.pdb
0000000014,ptr,\\mybuilds\symbols\x86\2134.chk\symbols\dll\msvcrt.pdb
0000000015,ptr,\\mybuilds\symbols\x86\2133\symbols\dll\msvcrt.pdb
0000000016,ptr,\\mybuilds\symbols\x86\2133.chk\symbols\dll\msvcrt.pdb
0000000017,ptr,\\mybuilds\symbols\x86\2132\symbols\dll\msvcrt.pdb
0000000018,ptr,\\mybuilds\symbols\x86\2132.chk\symbols\dll\msvcrt.pdb
0000000019,ptr,\\mybuilds\symbols\x86\2131\symbols\dll\msvcrt.pdb
0000000020,ptr,\\mybuilds\symbols\x86\2131.chk\symbols\dll\msvcrt.pdb
0000000021,ptr,\\mybuilds\symbols\x86\2130\symbols\dll\msvcrt.pdb
0000000022,ptr,\\mybuilds\symbols\x86\2130.chk\symbols\dll\msvcrt.pdb
0000000023,ptr,\\mybuilds\symbols\x86\2129\symbols\dll\msvcrt.pdb
0000000024,ptr,\\mybuilds\symbols\x86\2129.chk\symbols\dll\msvcrt.pdb
0000000025,ptr,\\mybuilds\symbols\x86\2128\symbols\dll\msvcrt.pdb
0000000026,ptr,\\mybuilds\symbols\x86\2128.chk\symbols\dll\msvcrt.pdb
0000000027,ptr,\\mybuilds\symbols\x86\2141\symbols\dll\msvcrt.pdb
0000000028,ptr,\\mybuilds\symbols\x86\2141.chk\symbols\dll\msvcrt.pdb
0000000029,ptr,\\mybuilds\symbols\x86\2142\symbols\dll\msvcrt.pdb
0000000030,ptr,\\mybuilds\symbols\x86\2142.chk\symbols\dll\msvcrt.pdb

Ini menunjukkan bahwa msvcrt.pdb yang sama digunakan untuk beberapa build simbol yang disimpan di \\mybuilds\symsrv.

Berikut adalah contoh direktori yang berisi campuran file dan penunjuk tambahan:

Directory of E:\symsrv\dbghelp.dbg\38039ff439000
10/12/1999  01:54p         141,232     dbghelp.dbg
10/13/1999  04:57p              49     file.ptr
10/13/1999  04:57p             306     refs.ptr

Dalam hal ini, refs.ptr memiliki konten berikut:

0000000043,file,e:\binaries\symbols\retail\dll\dbghelp.dbg
0000000044,file,f:\binaries\symbols\retail\dll\dbghelp.dbg
0000000045,file,g:\binaries\symbols\retail\dll\dbghelp.dbg
0000000046,ptr,\\sampledir\bin\symbols\retail\dll\dbghelp.dbg
0000000047,ptr,\\sampledir2\bin\symbols\retail\dll\dbghelp.dbg

Dengan demikian, transaksi 43, 44, dan 45 menambahkan file yang sama ke server, dan transaksi 46 dan 47 pointer tambahan. Jika transaksi 43, 44, dan 45 dihapus, maka file dbghelp.dbg akan dihapus dari direktori. Direktori kemudian akan memiliki konten berikut:

Directory of e:\symsrv\dbghelp.dbg\38039ff439000
10/13/1999  05:01p                   49 file.ptr
10/13/1999  05:01p                 130 refs.ptr

Sekarang file.ptr berisi "\\sampledir2\bin\symbols\retail\dll\dbghelp.dbg", dan refs.ptr berisi

0000000046,ptr,\\sampledir\bin\symbols\retail\dll\dbghelp.dbg
0000000047,ptr,\\sampledir2\bin\symbols\retail\dll\dbghelp.dbg

Setiap kali entri akhir di refs.ptr adalah pointer, file file.ptr akan ada dan berisi jalur ke file terkait. Setiap kali entri akhir di refs.ptr adalah file, tidak ada file.ptr yang akan ada di direktori ini. Oleh karena itu, setiap operasi penghapusan yang menghapus entri akhir di refs.ptr dapat mengakibatkan file.ptr dibuat, dihapus, atau diubah.