2013-06-15 25 views
12

Bir .NET derlemesi .dll dosyasının bir GUID (blog) kullanarak bir .pdb ile nasıl eşleştiğini anladım. Bir montajda hata ayıklayıp kaynak kodunu sorduğumda, bir dosyaya gidersem, kaynak kodun orijinalden farklı olduğunu söyleyebilirim. Bunu nasıl biliyor? .pdb dosyasının her dosya için bir sağlama toplamı içermesini bekliyordum, ancak görünmüyor. Hata ayıklama bilgisini döktüğüm en iyi araç dia2dump. C++ .pdb dosyaları MD5 girdisi vardı, ancak C# .pdb dosyaları yoktu.Kaynak dosya, özgün sürümle eşleşiyorsa Visual Studio nasıl tanıyor?

C dökümü ++
dia2dump -f dia2dump.pdb> -f dia2dump.pdb.files.txt

C# dökümü
dia2dump Autofac.pdb>Autofac.pdb.files.txt
dia2dump -tüm Autofac.pdb>Autofac.pdb.all.txt

bir şey var mı "tüm" çöplükte cevapsız mı?

Bir sağlama toplamı kullanmak zorunda. Ben Module.cs tek bir karakter değiştirirsem, olsun:
enter image description here

Nerede bir .PDB başvurulan bir kaynak dosyası için sağlama toplamı bulabilirim? Her bir kaynak dosya için bir MD5 sağlama toplamı .pdb dosyasında depolanır.

cevap

8

Yukarıdaki soruya "Hayır" yanıtını verirseniz "? sen ayıklayıcı yine de kullanmak ister misiniz", bunun arıyordu sağlama yazdırır: bir onaltılık düzenleyicisi kullanarak

enter image description here

görebilirsiniz kesinlikle .pdb içinde. Bir sonraki görevim programa nasıl erişileceğini bulmaktır. Bir .pdb dosyası için, tüm kaynak dosya adlarını ve MD5 sağlama toplamlarını döndürmesini istiyorum. Ben pdb bakarak oldum

enter image description here

+0

son zamanlarda çok dosyaları. Daha fazla bilgiyi burada bulabilirsiniz. http://blog.ctaggart.com/search/label/pdb –

+0

MD5 hashını .NET PDB'lerinden çıkarmanın bir yolunu buldunuz mu? – Petrik

+2

Yaptım. Kaynak yapabilen SourceLink adlı bir .NET kütüphanesi oluşturdum. https://github.com/ctaggart/SourceLink –