Visual Studio 2005 .pdb
, sürümde derlerken neden dosyaları oluşturur ? Bir sürüm derlemesinde hata ayıklamayacağım, neden üretiliyorlar?
Visual Studio 2005 .pdb
, sürümde derlerken neden dosyaları oluşturur ? Bir sürüm derlemesinde hata ayıklamayacağım, neden üretiliyorlar?
Yanıtlar:
Çünkü PDB dosyaları olmadan, bir "Release" derlemesinde adres düzeyinde hata ayıklama dışında herhangi bir şeyle hata ayıklamak imkansız olacaktır. Optimizasyonlar gerçekten kodunuzda bir sayı yapar, bir şeyler ters giderse suçluyu bulmayı çok zorlaştırır (bir istisna atılır). Kesme noktalarının ayarlanması bile son derece zordur, çünkü kaynak kod satırları üretilen derleme koduyla bire bir (hatta aynı sırayla) eşleştirilemez. PDB dosyaları size ve hata ayıklayıcıya yardımcı olarak ölüm sonrası hata ayıklamayı önemli ölçüde kolaylaştırır.
Yazılımınız piyasaya sürülmeye hazırsa, o zamana kadar tüm hata ayıklama işlemlerinizi yapmalısınız. Bu kesinlikle doğru olsa da, akılda tutulması gereken birkaç önemli nokta var:
Ayrıca "Release" derlemesini kullanarak uygulamanızı (yayınlamadan önce) test etmeli ve hatalarını ayıklamalısınız. Bunun nedeni, optimizasyonların açılması ("Hata Ayıkla" yapılandırması altında varsayılan olarak devre dışı bırakılmış olmaları) bazen başka şekilde yakalamayacağınız küçük hataların görünmesine neden olabilir. Bu hata ayıklamayı yaparken PDB sembollerini istersiniz.
Müşteriler genellikle sadece "ideal" koşullar altında ortaya çıkan uç vakaları ve hataları rapor eder. Bunlar, laboratuarda çoğaltılması neredeyse imkansız olan şeylerdir, çünkü bu kullanıcının makinesinin bazı kurnaz konfigürasyonuna güvenirler. Özellikle yararlı müşteriler iseler, atılan istisnayı rapor ederler ve size yığın takibi sağlarlar. Ya da yazılımınızı uzaktan hata ayıklamak için makinelerini ödünç almanıza bile izin verirler. Bu iki durumda da PDB dosyalarının size yardımcı olmasını istersiniz.
Profilleme her zaman optimizasyonlar etkinken "Release" derlemelerinde yapılmalıdır. Ve bir kez daha PDB dosyaları kullanışlı oluyor, çünkü montaj talimatlarının gerçekten yazdığınız kaynak koduyla eşleştirilmesine izin veriyorlar.
Derlemeden sonra geri dönüp PDB dosyalarını oluşturamazsınız . * Yapım sırasında bunları oluşturmazsanız, fırsatınızı kaybettiniz. Onları oluşturmak hiçbir şeye zarar vermez. Bunları dağıtmak istemiyorsanız, onları ikili dosyalarınızdan çıkarabilirsiniz. Ama daha sonra onları istediğinize karar verirseniz, şansınız kalmaz. İhtiyacınız olması durumunda, bunları her zaman oluşturmak ve arşivlemek daha iyidir.
Onları gerçekten kapatmak istiyorsanız, bu her zaman bir seçenektir. Projenizin Özellikler penceresinde, değiştirmek istediğiniz yapılandırma için "Hata Ayıklama Bilgisi" seçeneğini "yok" olarak ayarlayın.
"Ayıklama" ve "Release" yapılandırmaları Ancak, not Do do hata ayıklama bilgilerini yayan için varsayılan kullanımı farklı ayarları tarafından. Bu ayarı korumak isteyeceksiniz. "Hata Ayıklama Bilgisi" seçeneği, bir Hata Ayıklama derlemesi için "tam" olarak ayarlanır; bu, PDB dosyasına ek olarak hata ayıklama sembol bilgilerinin derlemeye gömülü olduğu anlamına gelir. Ayrıca, düzenle ve devam et gibi harika özellikleri destekleyen semboller de alırsınız. Release modunda, göründüğü gibi, derlemenin içeriğini etkilemeden yalnızca PDB dosyasını içeren "yalnızca pdb" seçeneği seçilir. Bu nedenle, /bin
dizininizdeki PDB dosyalarının varlığı veya yokluğu kadar basit değildir . Ancak "yalnızca pdb" seçeneğini kullandığınızı varsayarsak PDB dosyası '
* As Marc Sherman yorumunda işaret kaynak kodu değişmedi (veya bir sürüm kontrol sisteminden orijinal kodu alabilirsiniz) sürece, bunu yeniden ve eşleşen PDB dosyası oluşturabilir. En azından, genellikle. Bu çoğu zaman iyi çalışır, ancak aynı kodu her derlediğinizde derleyicinin aynı ikili dosyaları üreteceği garanti edilmez , bu nedenle küçük farklılıklar olabilir . Daha da kötüsü, bu arada araç zincirinizde herhangi bir yükseltme yaptıysanız (Visual Studio için bir hizmet paketi uygulamak gibi), PDB'lerin eşleşmesi daha az olasıdır. Ex postfacto'nun güvenilir üretimini garanti etmekPDB dosyaları, sürüm kontrol sisteminizdeki kaynak kodu değil, aynı zamanda yapı ortamınızın yapılandırmasını tam olarak yeniden oluşturabilmenizi sağlamak için tüm yapı araç zincirinizin ikili dosyalarını da arşivlemeniz gerekir. PDB dosyalarını oluşturmanın ve arşivlemenin çok daha kolay olduğunu söylemeye gerek yok.
.reload /i foo.dll
. Foo.dll serbest bırakıldıktan sonra foo.pdb oluşturulmuş olsa bile foo.pdb yükler.
PDB için Release
olduğu gibi üretilebilir Debug
. Bu (VS2010'da ancak VS2005'te benzer olmalıdır) olarak ayarlanır:
Proje → Özellikler → Oluştur → Gelişmiş → Hata Ayıklama Bilgisi
Sadece olarak değiştirin None
.
FileNotFoundException
), ancak bir yığın izleme görmek mümkün olmayacaktır. Bu , istisnanın hangi kod satırının atılmasına neden olduğunu tam olarak tespit etmeyi çok zorlaştırır .
.Pdb dosyaları olmadan üretim koduna adım atmak neredeyse imkansızdır; masraflı ve zaman alıcı olabilecek diğer araçlara güvenmeniz gerekir. Örneğin izleme veya windbg kullanabileceğinizi anlıyorum, ancak gerçekten ne elde etmek istediğinize bağlı. Belirli senaryolarda, belirli davranışı gözlemlemek için üretim verilerini kullanarak uzaktan kodda (hata veya istisna olmadan) adım atmak istersiniz ve bu .pdb dosyalarının kullanışlı olduğu yerdir. Onlar olmadan bu kodda hata ayıklayıcıyı çalıştırmak imkansızdır.
Sürüm sürümlerinde hata ayıklamayacağınızdan neden bu kadar eminsiniz? Bazen (umarım nadiren olur ama olur), bir nedenden dolayı hata ayıklama sürümünde yeniden üretilemeyen bir müşteriden bir hata raporu alabilirsiniz (farklı zamanlamalar, küçük farklı davranışlar veya her neyse). Bu sorun sürüm derlemesinde yeniden oluşturulabilir gibi görünüyorsa, eşleşen pdb'ye sahip olmaktan memnuniyet duyarsınız.
Ayrıca, yazılımınızda hata ayıklamak için çökme dökümlerini kullanabilirsiniz. Müşteri bunu size gönderir ve daha sonra kaynağınızın tam sürümünü tanımlamak için kullanabilirsiniz - ve Visual Studio, çökme dökümünü kullanarak doğru hata ayıklama simgeleri kümesini (ve doğru şekilde ayarlandığınızda kaynağı) bile çeker. Microsoft'un Symbol Stores hakkındaki belgelerine bakın .
.PDB dosyası "Program Veritabanı" nın kısa adıdır. Hata ayıklayıcı için hata ayıklama noktası ve kullanılan veya başvurulan kaynaklar hakkında bilgiler içerir. Hata ayıklama modu olarak oluşturulduğunda oluşturulur. Uygulamanın çalışma zamanında hata ayıklamak için izin verir.
Hata ayıklama modunda .PDB dosyasının boyutu artar. Uygulamamızı test ederken kullanılır.
PDB dosyası için iyi bir makale.
http://www.codeproject.com/Articles/37456/How-To-Inspect-the-Content-of-a-Program-Database-P
Çok projeli bir çözümde, genellikle hiç PDB veya XML dosyası oluşturmayan bir yapılandırmaya sahip olmak istersiniz. Debug Info
Her projenin özelliğini değiştirmek yerine, none
yalnızca belirli bir yapılandırmada çalışan bir post-build olayı eklemenin daha uygun olacağını düşündüm.
Ne yazık ki, Visual Studio farklı yapılandırmalar için farklı oluşturma sonrası olaylar belirtmenize izin vermez. Bu yüzden csproj
, başlangıç projesinin dosyasını düzenleyerek ve aşağıdakileri ekleyerek (mevcut herhangi bir PostBuildEvent
etiket yerine ) manuel olarak yapmaya karar verdim :
<PropertyGroup Condition="'$(Configuration)' == 'Publish'">
<PostBuildEvent>
del *.pdb
del *.xml
</PostBuildEvent>
</PropertyGroup>
Ne yazık ki, bu post-build olay metin kutusunu boş yapacak ve içine bir şey koymak tahmin edilemeyen sonuçlar doğurabilir.
*.xml
dosyaları silecektir , buna dikkat edin.
Hata ayıklama sembolleri ( .pdb) ve XML doc ( .xml) dosyaları toplam boyutun büyük bir yüzdesini oluşturur ve normal dağıtım paketinin bir parçası olmamalıdır. Ancak ihtiyaç duyulması halinde bunlara erişmek mümkün olmalıdır.
Olası bir yaklaşım: TFS oluşturma sürecinin sonunda, bunları ayrı bir yapıya taşıyın.
Aslında PDB dosyaları ve sembolik bilgileri olmadan başarılı bir kilitlenme raporu (bellek dökümü dosyaları) oluşturmak imkansız olurdu ve Microsoft sorunun nedenini tam olarak göremezdi.
Ve böylece PDB'ye sahip olmak çökme raporlamasını geliştirir.