Bagikan melalui


Menggunakan SymChk

Sintaks dasar untuk SymChk adalah sebagai berikut:

symchk [/r] FileNames /s SymbolPath 

FileNames menentukan satu atau beberapa file program yang simbolnya diperlukan. Jika FileNames adalah direktori dan bendera /r digunakan, direktori ini dieksplorasi secara rekursif, dan SymChk akan mencoba menemukan simbol untuk semua file program di pohon direktori ini. SymbolPath menentukan tempat SymChk mencari simbol.

Ada lebih banyak opsi baris perintah. Untuk daftar lengkapnya, lihat Opsi Command-Line SymChk.

Mendapatkan symchk

Symchk, seperti alat penelusuran kesalahan lainnya, dikirim sebagai bagian dari debugger. Untuk informasi selengkapnya, lihat Alat Penelusuran Kesalahan untuk Windows.

Setelah alat penelusuran kesalahan diinstal, symchk tersedia di direktori ini untuk Windows 64-bit.

C:\Program Files (x86)\Windows Kits\10\Debuggers\x64

Contoh Penggunaan

Jalur simbol yang ditentukan dapat mencakup sejumlah direktori lokal, direktori UNC, atau server simbol. Direktori lokal dan direktori UNC tidak dicari secara rekursif. Hanya direktori yang ditentukan dan subdirektori berdasarkan ekstensi yang dapat dieksekusi yang dicari. Misalnya, kueri

symchk thisdriver.sys /s G:\symbols 

akan mencari G:\mysymbols dan G:\mysymbols\sys.

Anda dapat menentukan server simbol dengan menggunakan salah satu sintaks berikut sebagai bagian dari jalur simbol Anda:

srv*DownstreamStore*\\Server\Share
srv*\\Server\Share

Ini sangat mirip dengan menggunakan server simbol di jalur simbol debugger. Untuk detail tentang ini, lihat Menggunakan Server Simbol dan Penyimpanan Simbol.

Jika penyimpanan hilir ditentukan, SymChk akan membuat salinan semua file simbol valid yang ditemukan oleh server simbol dan menempatkannya di penyimpanan hilir. Hanya file simbol yang kecocokan lengkap yang disalin di hilir.

SymChk selalu mencari penyimpanan hilir sebelum mengkueri server simbol. Oleh karena itu Anda harus berhati-hati menggunakan toko hilir ketika orang lain memelihara toko simbol. Jika Anda menjalankan SymChk sekali dan menemukan file simbol, SymChk akan menyalinnya ke penyimpanan hilir. Jika Anda kemudian menjalankan SymChk lagi setelah file-file ini diubah atau dihapus di penyimpanan simbol, SymChk tidak akan melihat fakta ini, karena akan menemukan apa yang dicari di penyimpanan hilir dan tidak melihat lebih lanjut.

Catatan SymChk selalu menggunakan SymSrv (Symsrv.dll) sebagai DLL server simbolnya. Di sisi lain, debugger dapat memilih DLL server simbol selain SymSrv jika tersedia. (SymSrv adalah server simbol yang disertakan dalam paket Alat Debugging untuk Windows.)

Menggunakan SymChk untuk menentukan apakah simbol bersifat privat atau publik

Untuk menentukan apakah file simbol bersifat privat atau publik, gunakan parameter /v sehingga SymChk menampilkan output verbose. Misalkan MyApp.exe dan MyApp.pdb berada di folder c:\sym. Masukkan perintah ini.

symchk /v C:\sym\MyApp.exe /s C:\sym**

Jika MyApp.pdb berisi simbol privat, output SymChk terlihat seperti ini.

[SYMCHK] Searching for symbols to c:\sym\MyApp.exe in path c:\sym
...
DBGHELP: MyApp - private symbols & lines
        c:\sym\MyApp.pdb
...
SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

Jika MyApp.pdb hanya berisi simbol publik, output SymChk terlihat seperti ini.

[SYMCHK] Searching for symbols to c:\sym\MyApp.exe in path c:\sym
...
DBGHELP: MyApp - public symbols
        c:\sym\MyApp.pdb
...
SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

Untuk membatasi pencarian Anda sehingga hanya menemukan file simbol publik, gunakan opsi s dengan parameter /s (/ss). Perintah berikut menemukan kecocokan jika MyApp.pdb hanya berisi simbol publik. Ini tidak menemukan kecocokan jika MyApp.pdb berisi simbol privat.

symchk /v C:\sym\MyApp.exe /s C:\sym

Untuk informasi selengkapnya, lihat Simbol Publik dan Privat.

Contoh

Berikut adalah beberapa contohnya. Perintah berikut mencari simbol untuk Myapp.exe program:

E:\debuggers> symchk F:\myapp.exe /s F:\symbols\applications 

SYMCHK: Myapp.exe           FAILED  - Myapp.pdb is missing

SYMCHK: FAILED files = 1
SYMCHK: PASSED + IGNORED files = 0

Anda dapat mencoba lagi dengan jalur simbol yang berbeda:

E:\debuggers> symchk F:\myapp.exe /s F:\symbols\newdirectory 

SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

Pencarian berhasil kali ini. Jika opsi verbose tidak digunakan, SymChk hanya akan mencantumkan file yang gagal menemukan simbol. Jadi dalam contoh ini tidak ada file yang terdaftar. Anda dapat mengetahui bahwa pencarian berhasil karena sekarang ada satu file yang tercantum dalam kategori "lulus" dan tidak ada dalam kategori "gagal".

File program diabaikan jika tidak berisi kode yang dapat dieksekusi. Banyak file sumber daya berjenis ini.

Jika Anda lebih suka melihat nama file dari semua file program, Anda dapat menggunakan opsi /v untuk menghasilkan output verbose:

E:\debuggers> symchk /v F:\myapp.exe /s F:\symbols\newdirectory 

SYMCHK: MyApp.exe           PASSED

SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

Perintah berikut mencari sejumlah besar simbol Windows di server simbol. Ada berbagai kemungkinan pesan kesalahan:

E:\debuggers> symchk /r C:\windows\system32 /s srv*\\manysymbols\windows 

SYMCHK: msisam11.dll         FAILED  - MSISAM11.pdb is missing
SYMCHK: msuni11.dll          FAILED  - msuni11link.pdb is missing
SYMCHK: msdxm.ocx            FAILED  - Image is split correctly, but msdxm.dbg i
s missing
SYMCHK: expsrv.dll           FAILED  - Checksum doesn't match with expsrv.DBG
SYMCHK: imeshare.dll         FAILED  - imeshare.opt.pdb is missing
SYMCHK: ir32_32.dll          FAILED  - Built with no debugging information
SYMCHK: author.dll           FAILED  - rpctest.pdb is missing
SYMCHK: msvcrt40.dll         FAILED  - Built with no debugging information
......
SYMCHK: FAILED files = 211
SYMCHK: PASSED + IGNORED files = 4809

Lihat juga

Opsi Command-Line SymChk

Menggunakan Server Simbol dan Penyimpanan Simbol