Bagikan melalui


Menggunakan PDBCopy

PDBCopy adalah alat baris perintah yang membuat file simbol yang dilucuti dari file simbol lengkap. Dengan kata lain, dibutuhkan file simbol yang berisi data simbol privat dan tabel simbol publik, dan membuat salinan file yang hanya berisi tabel simbol publik. Bergantung pada opsi PDBCopy mana yang digunakan, file simbol yang dilucuti berisi seluruh tabel simbol publik atau subset tertentu dari tabel simbol publik.

Untuk lokasi PDBCopy di WDK, lihat Direktori penginstalan di Alat yang Disertakan dalam Alat Penelusuran Kesalahan untuk Windows.

PDBCopy berfungsi dengan file simbol format PDB apa pun (dengan ekstensi nama file .pdb), tetapi tidak dengan file simbol format (.dbg) yang lebih lama.

Untuk deskripsi tabel simbol publik dan data simbol privat, lihat Simbol Publik dan Privat.

Menghapus Simbol Privat

Jika Anda ingin membuat file simbol yang dilucuti yang berisi semua simbol publik dan tidak ada simbol privat, gunakan PDBCopy dengan tiga parameter: jalur dan nama file simbol asli, jalur dan nama file simbol baru, dan opsi -p.

Misalnya, perintah berikut membuat file baru, bernama publicsymbols.pdb, yang berisi tabel simbol publik yang sama dengan mysymbols.pdb tetapi tidak berisi data simbol privat:

pdbcopy mysymbols.pdb publicsymbols.pdb -p

Jika mysymbols.pdb kebetulan sudah menjadi file simbol yang dilucuti, konten simbolis file baru dan file lama akan identik.

Setelah mengeluarkan perintah ini, Anda harus memindahkan file baru ke lokasi baru dan mengganti namanya menjadi nama asli file simbol (dalam contoh ini, mysymbols.pdb), karena sebagian besar program penelusuran kesalahan dan program ekstraksi simbol mencari simbol berdasarkan nama file tertentu. Atau, Anda dapat menggunakan nama file yang sama untuk file input dan file output pada baris perintah PDBCopy, selama direktori yang berbeda ditentukan:

pdbcopy c:\dir1\mysymbols.pdb c:\dir2\mysymbols.pdb -p

Catatan File tujuan tidak boleh ada sebelum PDBCopy dijalankan. Jika file dengan nama ini ada, berbagai kesalahan dapat terjadi.

Menghapus Simbol Privat dan Simbol Publik Terpilih

Jika Anda ingin tidak hanya menghapus data simbol privat, tetapi juga mengurangi jumlah informasi dalam tabel simbol publik, Anda dapat menggunakan opsi -f untuk menentukan daftar simbol publik yang akan dihapus.

Contoh berikut mengilustrasikan prosedur ini:

  1. Tentukan nama lengkap, termasuk dekorasi, dari simbol yang ingin Anda hapus. Jika Anda tidak yakin dengan nama simbol yang dihiasi, Anda dapat menggunakan alat DBH untuk menentukannya. Lihat Menentukan Dekorasi Simbol Tertentu untuk detailnya. Dalam contoh ini, mari kita anggap bahwa nama simbol yang dihiasi yang ingin Anda hapus _myGlobal1 dan _myGlobal2.

  2. Buat file teks yang berisi daftar simbol yang akan dihapus. Setiap baris dalam file ini harus menyertakan nama satu simbol, termasuk dekorasi, tetapi tidak termasuk nama modul. Dalam contoh ini, file akan berisi dua baris berikut:

    _myGlobal1
    _myGlobal2
    

    File dapat diberi nama apa pun yang Anda pilih. Mari kita misalkan Anda menamai file ini listfile.txt dan menempatkannya di direktori C:\Temp.

  3. Gunakan baris perintah PDBCopy berikut:

    pdbcopy OldPDB NewPDB -p -f:@TextFile
    

    di mana OldPDB dan NewPDB adalah file simbol asli dan file simbol baru, dan TextFile adalah file yang dibuat di langkah kedua. Opsi -f menunjukkan bahwa simbol publik tertentu akan dihapus, dan ampersand ( @ ) menunjukkan bahwa simbol ini tercantum dalam file teks yang ditentukan.

    Dalam contoh saat ini, perintah akan terlihat seperti ini:

    pdbcopy c:\dir1\mysymbols.pdb c:\dir3\mysymbols.pdb -p -f:@c:\temp\listfile.txt
    

    Ini membuat file simbol baru, C:\dir3\mysymbols.pdb, yang tidak berisi simbol privat apa pun dan tidak berisi dua variabel global yang Anda cantumkan di listfile.txt.

Seperti yang ditunjukkan dalam contoh ini, opsi -f PDBCopy menghapus daftar simbol publik tertentu. Ampersand ( @ ) menunjukkan bahwa simbol-simbol ini tercantum dalam file teks. Metode alternatif adalah mencantumkan semua simbol pada baris perintah, menggunakan opsi -f tanpa ampersand. Dengan demikian baris perintah berikut setara dengan contoh dalam prosedur di atas:

pdbcopy c:\dir1\mysymbols.pdb c:\dir3\mysymbols.pdb -p -f:_myGlobal1 -f:_myGlobal2

Kecuali Anda hanya ingin menghapus satu atau dua simbol, lebih mudah untuk menggunakan file teks daripada mencantumkannya di baris perintah.

Jika Anda ingin menghapus sebagian besar simbol publik dari file .pdb Anda, opsi -F adalah metode term mudah. Meskipun opsi -f mengharuskan Anda untuk mencantumkan simbol publik yang ingin Anda hapus, opsi -F mengharuskan Anda untuk mencantumkan simbol publik yang tidak ingin Anda hapus. Semua simbol publik lainnya (serta semua simbol privat) akan dihapus. Opsi -F mendukung dua opsi sintaks yang sama dengan opsi -f: baik -F: diikuti dengan nama simbol yang akan dipertahankan, atau -F:@ diikuti dengan nama file teks yang berisi daftar simbol yang akan dipertahankan. Dalam kedua kasus, nama simbol yang didekorasi harus digunakan.

Misalnya, perintah berikut menghapus semua simbol privat dan hampir semua simbol publik, hanya menyisakan simbol _myFunction5 dan _myGlobal7:

pdbcopy c:\dir1\mysymbols.pdb c:\dir3\mysymbols.pdb -p -F:_myFunction5 -F:_myGlobal7

Jika Anda menggabungkan beberapa instans opsi -f pada satu baris, semua simbol yang ditentukan akan dihapus. Jika Anda menggabungkan beberapa instans opsi -F pada satu baris, semua simbol yang ditentukan akan dipertahankan, dan semua simbol lainnya akan dihapus. Anda tidak dapat menggabungkan -f dengan -F.

Opsi -f dan -F tidak dapat digunakan tanpa opsi -p, yang menghapus semua data simbol privat. Bahkan jika file asli Anda tidak berisi simbol privat, Anda masih harus menyertakan opsi -p (meskipun tidak berpengaruh dalam kasus ini).

Opsi -F tidak dapat digunakan untuk mencegah data simbol privat dihapus. Jika Anda menggunakan opsi ini dengan simbol yang tidak disertakan dalam tabel simbol publik, PDBCopy mengabaikannya.

The mspdb*.dll File

PDBCopy harus mengakses file Mspdb80.dll atau file Mspdb60.dll agar dapat berjalan. Secara default, PDBCopy menggunakan Mspdb80.dll, yang merupakan versi yang digunakan oleh Visual Studio .NET 2002 dan versi Visual Studio yang lebih baru. Jika simbol Anda dibuat menggunakan Visual Studio 6.0 atau versi yang lebih lama, Anda dapat menentukan opsi baris perintah -vc6 sehingga PDBCopy menggunakan Mspdb60.dll sebagai gantinya, meskipun ini tidak diperlukan. PDBCopy mencari file yang sesuai meskipun opsi -vc6 tidak digunakan. Anda dapat menemukan file-file ini dalam penginstalan Visual Studio, Platform SDK, atau Windows Driver Kit (WDK).

Sebelum menjalankan PDBCopy, pastikan bahwa versi file mspdb*.dll yang benar dapat diakses oleh komputer Anda, dan pastikan lokasinya adalah bagian dari jalur perintah. Jika tidak, Anda harus menggunakan perintah jalur untuk menambahkan lokasi ini ke jalur perintah.

Tanda Tangan File dan Indeks SymSrv

Setiap file simbol memiliki tanda tangan tetap yang secara unik mengidentifikasinya. SymSrv menggunakan tanda tangan untuk menghasilkan "nilai indeks" unik untuk file. Jika dua file memiliki konten yang berbeda atau waktu pembuatan yang berbeda, file tersebut juga akan memiliki tanda tangan yang berbeda dan nilai indeks SymSrv yang berbeda.

File yang dibuat dengan PDBCopy adalah pengecualian untuk aturan nilai indeks unik. Ketika PDBCopy membuat file simbol baru, file tersebut memiliki tanda tangan yang sama dan nilai indeks SymSrv sebagai file lama. Fitur ini memungkinkan satu file diganti dengan yang lain tanpa mengubah perilaku alat terkait simbol.

Jika Anda ingin file baru memiliki tanda tangan yang berbeda dan indeks SymSrv, gunakan opsi -s. Dalam kebanyakan kasus, Anda tidak akan ingin menggunakan opsi ini, karena penggunaan PDBCopy yang paling umum adalah membuat file simbol yang diubah yang dapat menggantikan file lama tanpa menyebabkan ketidakcocokan. Tanda tangan baru dapat menyebabkan SymSrv menetapkan nilai indeks yang berbeda ke file baru daripada ke file lama, mencegah file baru mengganti yang lama dengan benar.

Untuk sintaks baris perintah lengkap, lihat Opsi Command-Line PDBCopy.