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
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).
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:
Aslında düşündüğünüz kadar kolay değil ... –
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
Ş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
- 1. VS 2008'de Visual C++ Yeniden Dağıtılabilir Yükleyici nerede bulunur?
- 2. backtrace
- 3. Microsoft.Deployment.WindowsInstaller nerede bulunur?
- 4. Microsoft Visual C++ kod optimizasyonu
- 5. Geçici tablolar nerede bulunur?
- 6. Web Sitesi Yönetim Aracı Visual Studio 2012'de nerede bulunur
- 7. Bestecinin global paketleri nerede bulunur?
- 8. ConstraintLayout kaynak kodu nerede bulunur?
- 9. MVEL Dil Başvurusu nerede bulunur?
- 10. Montaj yapılandırma bilgileri nerede bulunur?
- 11. HTTP yöntemleri örnekleri nerede bulunur?
- 12. Çok yönlülük.pool.ApplyResult belgelerinin nerede bulunur?
- 13. Xcode sabit sürücüde nerede bulunur?
- 14. Netbeans paletinde setVisible nerede bulunur?
- 15. gdb backtrace?
- 16. C++ için Visual Studio kod metrik eklentisi
- 17. "C/C++ Kullanıcı Günlüğü" kod arşivini nerede bulabilirim?
- 18. Visual Studio kod biçimlendirmesi
- 19. Visual Studio'da dış kodun nasıl tanımlanır (F12)?
- 20. Yerel WPF denetimleri için Generic.xaml nerede bulunur?
- 21. .External2() tarafından çağrılan kod nasıl bulunur?
- 22. Visual Lisp: dış C++ DLL'de işlevler nasıl çağırılır
- 23. Java kod belgelerine dış sayfalar nasıl eklenir?
- 24. jQuery.ajax, jQuery kaynak kodunda nerede bulunur?
- 25. Eski Raylar nerede bulunur 2.3 Kılavuzlar
- 26. ZK sclass kullanılabilir öğeleri nerede bulunur?
- 27. Intellij IDE'de "sistem çıkışı" çıktısı nerede bulunur?
- 28. En iyi kullanıcı öykü şablonu nerede bulunur?
- 29. ADO.NET Entity Framework hata listesi nerede bulunur?
- 30. Android Studio'da 'Artifact' için nerede bulunur/kurulur?
ah evet, gösterir? –
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
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? –