PDB dosyası nedir?


252

Ne PDB dosyası nedir ve çözümümü yeniden oluştururken nasıl yayım klasöründen hariç tutabilirim?


17
pdb bir program veritabanı dosyasıdır ve derleme üzerinde oluşturulur. Bu dosya, programınızın hata ayıklama yapılandırmasının artımlı olarak bağlanmasına izin veren hata ayıklama ve proje durumu bilgilerini içerir.
pavanred

@pavanred, C # derleyicisinin artımlı bağlantı da yaptığından emin misiniz? Sadece C ++ dünyasında duydum. Bir C ++ projesinde, proje özelliklerinden artımlı bağlantıyı etkinleştirir / devre dışı bırakırsınız. C # projesinde de bir seçenek var mı?
RBT

Yanıtlar:


236

Bir PDB dosyası, hata ayıklayıcının çalışabileceği bilgileri içerir. Release derlemesinde zaten Debug derlemesinden daha az bilgi var. Ancak bunun hiç oluşturulmamasını istiyorsanız, projenizin Yapı özelliklerine gidin, Sürüm yapılandırmasını seçin, "Gelişmiş ..." seçeneğini tıklayın ve "Hata Ayıklama Bilgisi" altında "Hiçbiri" ni seçin.


2
@Jon Uygulama kullanım sırasında çökerse kullanıcıya ek bilgi sağlamaya yardımcı olur mu? (yani, "Bu programın sona ermesi, bir Windows Hata Raporu göndermesi gerekiyor" yerine JIT penceresine yardımcı oluyor mu)
Jared Harley

19
Kodunuzdaki belirli bir satıra istisnaların izlenmesine izin verdiği için, muhtemelen hata ayıklama sürümlerinize dahil etmeniz gerektiğini unutmayın. Pdb dosyasındaki semboller olmadan, belirli sorunları çözmek için kesin olarak bulmak zor olacaktır. Bazen büyük bir rapordaki ek bilgiler çok yararlı olabileceğinden, bunları sürüm derlemelerinden hariç tutmanız gerekmez.
Darbio

4
@Jared: Evet, özel bir işlev ve kod satırını belirleyecek özel durumun yığın izini içerir.
Darbio

1
@Jared: "JIT penceresi" ile ne demek istiyorsun? Kullanıcıya çok daha fazla bilgi vermek olası değildir, ancak gerekirse bir sürüm derlemesine hata ayıklayıcı eklemenize izin verebilir. Genellikle son kullanıcı uygulamaları için eklemezsiniz. Tabii ki, sadece Yayın klasörüne kopyalandığı için, yükleyicide göndermeniz gerektiği anlamına gelmez ...
Jon Skeet

3
@Ata: PDB, PDF değil. Lütfen ikinizi zihninizde ayırın - bunlar farklı amaçlar için tamamen farklı dosya formatlarıdır. Bir PDB'nin dahil edilmesi özellikle bir sorun yaratmayacaktır; o olabilir bir hacker'ın işi yapmak biraz daha kolay, ama sizin için bir özellikle endişe olduğunu? Genel olarak, .NET çoğu durumda nispeten kolayca çözülebilir - bunun için endişeleniyorsanız, PDB'yi göndermemek iyi bir çözüm değildir.
Jon Skeet

130

Başlangıçta kendime " Müşterimin makinesine dağıtılan bir PDB dosyasına ihtiyacım var mı? " Sorusunu sormuştum ve bu yazıyı okuduktan sonra dosyayı hariç tutmaya karar verdim.

Exception.StackTraceİstisna sorunlarını gidermek için gerekli olan bir ileti kutusunun neden dosya ve satır numarası bilgilerini eksik olduğunu anlamaya çalıştığım zamana kadar her şey yolunda gitti . Bu yazıyı yeniden okudum ve anahtar bilgi külçesini buldum: PDB, uygulamanın çalışması için gerekli olmamasına rağmen, dosya ve satır numaralarının StackTracedizede bulunması için gerekli . PDB dosyasını yürütülebilir klasöre dahil ettim ve şimdi her şey yolunda.


2
Bu, accepted answerburada bahsetmediği akılda tutulması gereken çok önemli bir parçadır .
Monku

85

PDB , P rogram D ata B ase için bir kısaltmadır . Adından da anlaşılacağı gibi, programınızı hata ayıklama modunda çalıştırmak için gereken bilgileri korumak bir havuzdur (veritabanları gibi kalıcı bir depolama alanı). Kodunuzda hata ayıklama yaparken (Visual Studio'da) gereken birçok önemli önemli bilgiyi içerir; örneğin hata ayıklayıcının Visual Studio'da kırılmasını beklediğiniz noktalara hangi noktaları eklediğiniz.

*.pdbDosyaları hata ayıklama klasörlerinizden kaldırırsanız, Visual Studio birçok kez kesme noktalarına ulaşamamasının nedeni budur . Visual Studio hata ayıklayıcı, bir yığın izlemede *.pdbdosyaların yardımıyla istisna oluştuğu kod dosyasının tam satır numarasını da söyleyebilir . Yani pdb dosyaları gerçekten bir program hata ayıklama sırasında geliştiriciler için bir nimet.

Genellikle *.pdbdosya oluşturma işleminin hariç tutulması önerilmez . Üretim sürümünden itibaren yapmanız gereken pdb dosyaları oluşturmak, ancak ürün yükleyicide müşteri sitesine göndermeyin. Oluşturulan tüm PDB dosyalarını, gerektiğinde gelecekte kullanılabileceği / referans verilebileceği bir sembol sunucusunda saklayın. Özellikle işlem çökmesi gibi sorunları ayıkladığınız durumlar için. Çökme döküm dosyalarını analiz etmeye başladığınızda *.pdbve oluşturma işlemi sırasında oluşturulan özgün dosyalarınız korunmazsa, Visual Studio çökmeye neden olan kodun tam satırını yapamaz .

Herhangi *.pdbbir sürüm için dosya oluşturmayı hala devre dışı bırakmak istiyorsanız , projenin özelliklerine gidin -> Oluştur Sekmesi -> Advanceddüğmesini tıklayın -> none"Hata Ayıklama Bilgisi" açılır kutusundan seçin -> OKaşağıdaki anlık görüntüde gösterildiği gibi basın .

Hiçbiri C # Projesi için Hata Ayıklama Bilgisi ayarı

Not : Bu ayarın "Hata Ayıkla" ve "Serbest Bırak" oluşturma yapılandırmaları için ayrı olarak yapılması gerekir.


13

Bir PDB dosyası , hata ayıklayıcı tarafından kullanılan bilgileri içerir. Uygulamanızı çalıştırmanız gerekmez ve sürümünüze dahil edilmesi gerekmez.

PDB dosyalarının Visual Studio'da oluşturulmasını devre dışı bırakabilirsiniz. Komut satırından veya bir komut dosyasından oluşturuyorsanız, /Debuganahtarı atlayın .


2
Bırakma modu hala varsayılan olarak PDB'ler oluşturur, inanıyorum. Yine de devre dışı bırakmak için proje özelliklerini değiştirebilirsiniz.
Jon Skeet

Evet; hala varsayılan bir proje ile birlikte geliyor.
Andrew Barber

Sadece kontrol ettim ve Visual Studio kullanıyorsanız varsayılan olarak bir tane alıyorum.
Mark Byers

4

Program Hata Ayıklama Veritabanı dosyası (pdb), Microsoft tarafından hata ayıklama bilgilerini depolamak için kullanılan bir dosya biçimidir.

Visual Studio veya komut istemi kullanarak bir proje oluşturduğunuzda, derleyici bu sembol dosyalarını oluşturur.

Microsoft Dokümanlarını Kontrol Edin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.