2009-12-16 32 views
10

Büyük bir C# projesinde hata ayıklamak için visual C# kullanıyorum. Proje çok büyük ve pdb'lerin sadece bir kısmı kendim inşa ediyor. Tüm pdb'yi kurabilirim ancak çok zaman harcıyor. Bir backtrace hata ayıklanıyor ama izinin bir parçası [External Code] ile işaretlenmiştir. Bazı pdb eksik olduğunu biliyorum, ama hangi dış kodun bulunduğu DLL'yi nasıl bilebilirim? C'de EIP'yi bulabilirim, sonra EIP'nin nerede yaşadığını belirlemek için süreç haritalamasını görebilirim, fakat bunun nasıl yapılabileceğini. Net ortam?Visual C# backtrace: [dış kod] nerede bulunur?

cevap

23

Araçlar bölümüne gidin | Seçenekler | Hata ayıklama | Genel ve "Yalnızca Kodumu Etkinleştir" onay kutusunun işaretini kaldırın. Artık Visual Studio tam çağrı yığınını gösterecektir (en azından yönetilen kod için, burada da bazı "yönetilen geçişler için yerel" görebilirsiniz).

+0

ah evet, gösterir? –

+0

Yönetilmeyen kod için semboller (PDB) yoksa, bunun mümkün olduğuna inanmıyorum. VS, yönetilen derlemeler meta veri içerdiğinden, yığın izlemenin yönetilen bölümleri için yapabilir, ancak yönetilmeyen kod aynı meta verilere sahip olmaz, böylece VS, yöntem çağrılarını yeniden yapılandıramaz. Ancak, Modüller penceresini ve/veya "Kaynak kullanılamıyorsa demontajı göster" seçeneğini kullanarak onu biraz bağlayabilirsiniz, ancak bunu yapmanın bir deneyimi yok, üzgünüm. – itowlson

+0

Teşekkürler. Linux'ta daha önce yaptığım şey, EIP'yi (0x800453c gibi) alıyorum, sonra da dynamics DLL haritalarının bir haritasını aldım, sonra EIP'nin içine düştüğü DLL dosyasını alabiliyorum. Visual C# ile yapılabilir mi? –

1

Eğer projeniz çok büyükse, tüm sınıflarınızın ad alanlarınızda iyi bir şekilde paylaşıldığını ve tüm derlemelerin içerdikleri ad alanlarından sonra adlandırıldığını sanıyorum. Eğer harici kodunuzun başladığı (veya bittiği) bir yere bakarsanız, aramanın nereye gittiğini (veya aradığını) öğrenmeli ve eksik montaj pdb'yi belirleyiniz. \t [Yönetilen Geçiş Yerli] \t \t \t [Yerli Geçiş Yönetilen] Ama geçiş nereye alabilirim:

+0

Aslında düşündüğünüz kadar kolay değil ... –

+0

Ama sonra çözüm, proje, bir organizasyon problemi derleme, ad alanı, sınıf hiyerarşisi. Bu geriye dönük olarak düzeltmek sıkıcı ve pahalıdır. Bir sonraki proje için öğrenmek ve başlangıçta iyi bir yapı uygulamak. – Oliver

+0

Şimdilik, sadece tüm pdbs (belki bir gecede) inşa etti. Bu, günler için sadece bir (belki mevcut olmayan) çözümü aramaktan daha hızlı olacaktır. – Oliver

İlgili konular