Apa itu file PDB?

252

Apa itu file PDB dan bagaimana saya bisa mengecualikannya dari folder rilis ketika saya membangun kembali solusi saya?

Ata
sumber
17
pdb adalah file basis data program dan dibuat pada kompilasi. File ini menyimpan informasi debug dan status proyek yang memungkinkan penautan tambahan konfigurasi debug program Anda.
Pavanred
@pavanred apakah Anda yakin kompiler C # juga melakukan penautan tambahan? Saya hanya mendengarnya di dunia C ++. Dalam proyek C ++ Anda mengaktifkan / menonaktifkan penautan tambahan dari properti proyek. Apakah ada opsi dalam proyek C # juga?
RBT

Jawaban:

236

File PDB berisi informasi untuk bekerja dengan debugger. Ada informasi yang lebih sedikit dalam membangun Rilis daripada di membangun Debug pula. Tetapi jika Anda ingin itu tidak dihasilkan sama sekali, buka properti Build proyek Anda, pilih konfigurasi Release, klik "Advanced ..." dan di bawah "Info Debug" pilih "None".

Jon Skeet
sumber
2
@ Jon Apakah ini membantu memberikan informasi tambahan kepada pengguna jika aplikasi mogok digunakan? (yaitu, apakah itu membantu dengan jendela JIT, daripada "Program ini harus berakhir, kirim Laporan Kesalahan Windows")
Jared Harley
19
Ingatlah bahwa Anda mungkin harus memasukkan ini dalam rilis debug Anda, karena ini memungkinkan pengecualian untuk ditelusuri ke baris tertentu dalam kode Anda. Tanpa simbol dalam file pdb, Anda akan kesulitan menentukan masalah khusus untuk menyelesaikannya. Anda juga tidak perlu mengecualikan mereka dari rilis build, karena kadang-kadang informasi tambahan dalam laporan besar bisa sangat berguna.
Darbio
4
@ Jared: Ya, itu termasuk jejak stack pengecualian, yang akan menunjukkan dengan tepat fungsi dan baris kode.
Darbio
1
@ Jared: Apa yang Anda maksud dengan "jendela JIT"? Ini tidak mungkin untuk memberikan informasi lebih banyak kepada pengguna, tetapi mungkin membiarkan Anda melampirkan debugger ke rilis rilis jika Anda perlu. Biasanya Anda tidak akan memasukkannya untuk aplikasi pengguna akhir. Tentu saja, hanya karena itu disalin ke folder Release tidak berarti Anda harus mengirimkannya di installer ...
Jon Skeet
3
@ Alta: PDB, bukan PDF. Silakan memisahkan dua dalam pikiran Anda - mereka benar-benar format file yang berbeda, untuk tujuan yang berbeda. Termasuk PDB tidak akan menimbulkan masalah khususnya; itu mungkin membuat pekerjaan hacker yang sedikit lebih mudah, tetapi adalah bahwa perhatian khusus untuk Anda? Secara umum, .NET dapat didekompilasi dengan relatif mudah dalam banyak kasus - jika Anda khawatir tentang hal itu, cukup dengan tidak mengirimkan PDB bukanlah solusi yang baik.
Jon Skeet
130

Awalnya saya bertanya pada diri sendiri pertanyaan " Apakah saya perlu file PDB dikerahkan ke mesin pelanggan saya? ", Dan setelah membaca posting ini, memutuskan untuk mengecualikan file.

Semuanya berfungsi dengan baik, sampai hari ini, ketika saya mencoba mencari tahu mengapa kotak pesan yang berisi Exception.StackTraceinformasi file dan nomor baris hilang - diperlukan untuk mengatasi masalah pengecualian. Saya membaca kembali posting ini dan menemukan nugget kunci dari informasi: bahwa meskipun PDB tidak diperlukan agar aplikasi dapat berjalan, perlu agar file dan nomor baris ada di StackTracestring. Saya menyertakan file PDB dalam folder yang dapat dieksekusi dan sekarang semuanya baik-baik saja.

BCA
sumber
2
Ini adalah bagian yang sangat penting untuk diingat yang accepted answertidak disebutkan di sini.
Monku
85

PDB adalah singkatan untuk P rogram D ata B ase. Seperti namanya, itu adalah repositori (penyimpanan persisten seperti database) untuk mempertahankan informasi yang diperlukan untuk menjalankan program Anda dalam mode debug. Ini berisi banyak informasi relevan penting yang diperlukan saat Anda men-debug kode Anda (dalam Visual Studio), misalnya pada titik apa Anda telah memasukkan titik istirahat di mana Anda mengharapkan debugger untuk istirahat di Visual Studio.

Ini adalah alasan mengapa Visual Studio berkali-kali gagal mencapai titik istirahat jika Anda menghapus *.pdbfile dari folder debug Anda. Visual Studio debugger juga dapat memberi tahu Anda jumlah baris yang tepat dari file kode di mana pengecualian terjadi dalam tumpukan jejak dengan bantuan *.pdbfile. Jadi file pdb yang efektif benar-benar merupakan keuntungan bagi pengembang saat men-debug suatu program.

Secara umum tidak disarankan untuk mengecualikan pembuatan *.pdbfile. Dari sudut pandang rilis produksi apa yang harus Anda lakukan adalah membuat file pdb tetapi tidak mengirimkannya ke situs pelanggan di penginstal produk. Simpan semua file PDB yang dihasilkan ke server simbol dari tempat itu dapat digunakan / direferensikan di masa depan jika diperlukan. Khusus untuk kasus-kasus ketika Anda men-debug masalah seperti proses macet. Ketika Anda mulai menganalisis file-file crash dump dan jika *.pdbfile-file asli Anda yang dibuat selama proses build tidak dipertahankan maka Visual Studio tidak akan dapat melihat baris kode yang menyebabkan crash .

Jika Anda masih ingin menonaktifkan pembuatan *.pdbfile secara bersamaan untuk rilis apa pun, maka buka properti proyek -> Build Tab -> Klik Advancedtombol -> Pilih nonedari kotak drop-down "Info Debug" -> tekan OKseperti yang ditunjukkan pada foto di bawah ini .

Tidak ada pengaturan Info Debug untuk Proyek C #

Catatan : Pengaturan ini harus dilakukan secara terpisah untuk konfigurasi build "Debug" dan "Release".

RBT
sumber
13

Sebuah File PDB berisi informasi yang digunakan oleh debugger. Tidak diperlukan untuk menjalankan aplikasi Anda dan itu tidak perlu dimasukkan dalam versi yang Anda rilis.

Anda dapat menonaktifkan file pdb dari yang dibuat di Visual Studio. Jika Anda membangun dari baris perintah atau skrip maka abaikan /Debugsakelar.

Mark Byers
sumber
2
Mode rilis masih membangun PDB secara default, saya percaya. Anda dapat mengubah properti proyek untuk menonaktifkannya.
Jon Skeet
Ya; masih disertai dengan rilis dengan proyek default.
Andrew Barber
Saya baru saja memeriksa dan saya juga mendapatkannya secara default jika menggunakan Visual Studio.
Mark Byers
4

File Program Debug Database (pdb) adalah format file oleh Microsoft untuk menyimpan informasi debug.

Ketika Anda membangun proyek menggunakan Visual Studio atau command prompt kompiler membuat file simbol ini.

Periksa Microsoft Documents

Nipuna
sumber