2008-09-09 12 views
7

Kaynak kodlu bir üçüncü taraf bileşen kullanmam gerekiyor. Serbest bırakma DLL'im var ve PDB dosyasını serbest bırakıyorum. 'CorporateComponent.dll' diyelim. Kendi kodum bu DLL'den nesneler oluşturur ve bu nesnelerdeki yöntemleri çağırır.PDB hata ayıklaması sırasında bana ne kazandırıyor ve çalıştığını nasıl anlarım?

CorpObject o = new CorpObject(); 
Int32 result = o.DoSomethingLousy(); 

Hata ayıklama sırasında 'DoSomethingLousy' yöntemi bir istisna atar. PDB dosyası benim için ne yapar? Güzel bir şey yaparsa, bundan faydalandığımdan nasıl emin olabilirim?

cevap

6

Visual Studio IDE içinde hata ayıklama sırasında sağlanan PDB'yi CorporateComponent.pdb kullanarak onaylamak için çıktı penceresini gözden geçirin ve satırı bulun CorporateComponent.dll dizesi Symbols loaded dizesi tarafından yüklenen ve bunu gösteren belirten.

benim bir proje göstermek için:

The thread 0x6a0 has exited with code 0 (0x0). 
The thread 0x1f78 has exited with code 0 (0x0). 
'AvayaConfigurationService.vshost.exe' (Managed): Loaded 'C:\Development\Src\trunk\ntity\AvayaConfigurationService\AvayaConfigurationService\bin\Debug \AvayaConfigurationService.exe', Symbols loaded. 
'AvayaConfigurationService.vshost.exe' (Managed): Loaded 'C:\Development\Src\trunk\ntity\AvayaConfigurationService\AvayaConfigurationService\bin\Debug\IPOConfigService.dll', No symbols loaded. 

Loaded 'C:\Development\src...\bin\Debug\AvayaConfigurationService.exe', Symbols loaded.

Bu PDB bulunan ve IDE ayıklayıcı tarafından yüklenmiş olduğunu gösterir.

Diğerleri tarafından belirtildiği gibi Uygulamanız içinde yığın çerçeveleri incelendiğinde, CorporateComponent.pdb dosyasındaki sembolleri görebilmeniz gerekir. Eğer siz yapmıyorsanız, belki de üçüncü taraf, sürüm PDB yapısında sembol bilgisi içermiyordu.

4

PDB, bir kod izini aldığınızda kod için satır numaralarını alacağınız şekilde yönergeleri orijinal koddaki satır numaralarına eşleyen bir veritabanı dosyasıdır. Yönetilmeyen bir DLL ise, PDB dosyası, yığın izlemedeki işlevlerin adlarını da verir, oysa bu bilgiler genellikle yalnızca PDB'leri olmayan yönetilen DLL'ler için kullanılabilir.

0

pdb'den aldığım ana yığın yığınları için satır numaraları ve gerçek yöntem adlarıdır.

5

pdb, yığının doğru şekilde okunması için hata ayıklayıcısının gereksinim duyduğu bilgileri içerir. Yığın izleriniz, pdb'ye sahip olduğunuz modüllerin içindeki yığın çerçevelerinin satır numaralarını ve sembol adlarını içerir.

İki kullanım örneği vereceğim. İlk açık cevaptır. İkincisi, kaynak dizinli pdb'leri açıklar. çağırma ve hangi bağlı

1 kullanım örnek ...

ayıklayıcı elle bir Pdb sahip olmayan bir modül aracılığıyla yığını dinlenmek mümkün olmayabilir kullanılan derleyici Optimizasyonları. Bu, belirli üçüncü taraf kitaplıklarında ve hatta OS'nin bazı bölümlerinde de olabilir. Windows işletim sistemi içinde erişim ihlaliyle karşılaştığınız bir senaryoyu düşünün. Yığın izleme, kendi uygulamanızda dinlenmez; çünkü bu işletim sistemi bileşeni, hata ayıklayıcısını karıştıran özel bir çağrı kuralı kullanır. Genel OS pdb'lerini indirmek için sembol yolunuzu yapılandırırsanız, yığın izlemenin uygulamanıza dinlenebileceği iyi bir şanstır. Bu, kendi kodunuzun OS sistem çağrısına hangi argümanları ilettiğini görmenizi sağlar. ...

2 kullanım örneği (ve benzer örnek bir 3. parti kütüphanesinin içinde veya hatta kendi kodun içine AV için)

Pdb en

başka yararlı özelliği ise - bazı kaynak kontrol sistemleri kullanılarak entegre edilebilir microsoft'un "source indexing" adını verdiği bir özellik. Kaynak dizinli bir pdb, kaynak denetiminden bileşenin oluşturulması için kullanılan tam dosya sürümlerinin nasıl alınacağını belirten kaynak kontrol komutları içerir. Microsoft'un hata ayıklayıcıları, bir hata ayıklama oturumu sırasında dosyaları otomatik olarak almak için komutların nasıl yürütüleceğini anlar. Bu, hata ayıklayıcısını, bir kaynak ağacını belirli bir yapı için doğru etikete elle eşitlemek zorunda kalmadan kaydetmeyi sağlayan güçlü bir özelliktir. Özellikle uzaktan hata ayıklama oturumları ve ölüm sonrası çökme olaylarını analiz etmek için kullanışlıdır.

"Windows için hata ayıklama araçları" yüklemesi (windbg), srcrto.doc adlı belirli bir pdb'de hangi kaynak dosyalarının kaynak indekslendiğini belirlemek için srctool.exe aracının nasıl kullanılacağını gösteren bir belge içerir.

Sorunuzu "nasıl bilebilirim" diye yanıtlamak için, hata ayıklayıcıdaki "modüller" özelliği, hangi modüllerin karşılık gelen bir pdb'ye sahip olduğunu söyleyebilir. Windbg'de "lml" komutunu kullanın. Görsel stüdyolarda hata ayıklama menülerinde bir yerlerden modülleri seçin.(özür dilerim, Visual Studio'nun güncel bir sürümünü kullanamıyorum)

İlgili konular