Dalam Visual Studio 2010 untuk proyek C #, jika Anda masuk ke Project Properties> Build> Advanced> Debug Info Anda memiliki tiga opsi: tidak ada, penuh, atau hanya pdb. Berdasarkan jawaban atas pertanyaan ini , saya yakin saya memahami beberapa perbedaan antara full dan pdb-only. Namun, mana yang lebih sesuai untuk build rilis? Jika saya menggunakan "penuh" apakah akan ada konsekuensi kinerja? Jika saya menggunakan "pdb-only", apakah akan lebih sulit untuk men-debug masalah produksi?
Apa perbedaan antara "full" dan "pdbonly"? https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/debug-compiler-option
c#
visual-studio
debugging
build
debug-symbols
RationalGeek
sumber
sumber
Jawaban:
Saya akan membangun dengan
pdb-only
. Anda tidak akan dapat melampirkan debugger ke produk yang dirilis, tetapi jika Anda mengalami crash dump, Anda dapat menggunakan Visual Studio atau WinDBG untuk memeriksa jejak tumpukan dan dump memori pada saat crash.Jika Anda
full
memilih daripadapdb-only
, Anda akan mendapatkan manfaat yang sama, kecuali bahwa executable dapat dilampirkan langsung ke debugger. Anda harus menentukan apakah ini masuk akal mengingat produk & pelanggan Anda.Pastikan untuk menyimpan file PDB di suatu tempat sehingga Anda dapat mereferensikannya saat laporan kerusakan masuk. Jika Anda dapat menyiapkan server simbol untuk menyimpan simbol debugging tersebut, itu jauh lebih baik.
Jika Anda memilih untuk membangun dengan
none
, Anda tidak akan memiliki jalan lain saat terjadi crash di lapangan. Anda tidak akan bisa melakukan pemeriksaan setelah kejadian kecelakaan itu, yang bisa sangat menghambat kemampuan Anda untuk melacak masalahnya.Catatan tentang kinerja:
Baik John Robbins dan Eric Lippert telah menulis entri blog tentang
/debug
bendera tersebut, dan keduanya menunjukkan bahwa setelan ini tidak memiliki pengaruh kinerja apa pun . Ada tanda terpisah/optimize
yang menentukan apakah kompilator harus melakukan pengoptimalan.sumber
If you use /debug:full, be aware that there is some impact on the speed and size of JIT optimized code and a small impact on code quality with /debug:full. We recommend /debug:pdbonly or no PDB for generating release code.
PERINGATAN Dokumentasi MSDN untuk / debug switch (Di Visual Studio ini adalah Debug Info) tampaknya kedaluwarsa! Inilah yang dimilikinya yang salah
Lalu, apa yang benar sekarang?
Jika keduanya sama persis, mengapa kita memiliki opsi ini? John Robbins (dewa debugging windows) menemukan ini ada karena alasan historis.
lalu dia melanjutkan untuk membuktikannya.
Sekarang pengoptimalan adalah bagian dari sakelar terpisah
/optimize
(di studio visual disebutOptimize code
).Singkatnya, terlepas dari pengaturan DebugInfo pdb-only atau full, kami akan mendapatkan hasil yang sama. Rekomendasinya adalah untuk menghindari Tidak Ada karena ini akan membuat Anda tidak dapat menganalisis crash dump dari produk yang dirilis atau memasang debugger.
sumber
Release
tipe debug konfigurasi secara default disetel kepdbonly
.Anda hanya menginginkan PDB, tetapi Anda tidak ingin memberikan file PDB kepada pengguna. Memiliki mereka untuk Anda sendiri, di samping binari Anda, memberi Anda kemampuan untuk memuat crash dumps ke dalam debugger seperti WinDbg dan melihat di mana program Anda sebenarnya gagal. Ini bisa sangat berguna ketika kode Anda mogok di komputer yang tidak dapat Anda akses.
Debug penuh menambahkan atribut [Debuggable] ke kode Anda. Ini berdampak besar pada kecepatan. Misalnya, beberapa pengoptimalan loop mungkin dinonaktifkan untuk mempermudah satu langkah. Selain itu, ini memiliki efek kecil pada proses JIT, saat mengaktifkan pelacakan.
sumber
Saya sedang dalam proses menulis pengendali pengecualian yang tidak tertangani dan jejak tumpukan menyertakan nomor baris ketika hanya pdb digunakan, jika tidak, saya hanya mendapatkan nama Sub / Fungsi ketika saya memilih Tidak Ada.
Jika saya tidak mendistribusikan .pdb, saya tidak mendapatkan nomor baris di pelacakan tumpukan bahkan dengan build khusus pdb.
Jadi, saya mendistribusikan (XCOPY menyebarkan pada LAN) pdb bersama dengan exe dari aplikasi VB saya.
sumber