Visual Studio 2010 kullanıyorum ve C# kodlama yapıyorum. Projemde kullandığım üçüncü taraf bir dll var. Belirli bir yöntemi kullanmayı denediğimde, görünüşte rastgele durumlarda, program sadece bir istisna olmaksızın çöker. Seans sadece sona erer. Neler olup bittiğini takip etmenin bir yolu var mı?Üçüncü taraf dll, özel durumun olmadığı bir program çöküyor
cevap
Windows'da işlenen bir iş parçacığı yığınının yolu bu şekilde gider (kabaca; bu, devam eden her şeyin tam bir tanımı değildir, sadece size veri vermek için yeterlidir. Ve CLR'nin yığın sayfalarını işleme biçimi yönetilmeyen kodun da nasıl işlediğinden biraz farklıdır.)
Yığının üst kısmında, kullandığınız tüm sayfalar vardır. Sonra bir "koruma sayfası" var - eğer o sayfaya vurursanız, koruma sayfası yeni bir yığın sayfası haline gelir ve aşağıdaki sayfa yeni koruma sayfası olur. Ancak, yığınının son sayfa özeldir. Bir kez vurursanız, yığın taşması istisnası alırsınız. nu'a iki kez vurursanız, işlem 'u derhal olarak sonlandırır. "Hemen" ile "hemen" demek istiyorum - bir istisna yok, doğrudan hapishaneye git, gitme, 200 dolar toplama. İşletim sistemi, bu noktada işlemin derinden hastalığa neden olduğu ve muhtemelen kullanıcı için aktif olarak düşman haline gelmiştir. Yığın taşmış ve yığında taşan kod, belleğe keyfi olarak fazla çöp yazmaya çalışıyor olabilir. (*)
İşlem, kendisi ve başkaları için potansiyel bir tehlike oluşturduğundan, işletim sistemi daha fazla kodun çalışmasına izin vermeden onu kapatır.
Şüphelenmeniz, yönetilmeyen kodunuzdaki bir şeyin son yığın sayfasına iki kez çarpmasıdır. Hemen hemen her gördüğümde bir süreç aniden yok olur ya da başka bir açıklama ile kaybolur çünkü "benimle dalga geçme" yığını sayfası vuruldu.
(*) 1990'ların başında, NetWare adlı küçük bir işletim sistemi için veritabanı sürücüleri üzerinde çalıştım. Daha modern işletim sistemlerinin şu anda rutin olarak sahip olduğu bu tür korumalara sahip değildi. Çekirdek koruma seviyesinde çalışırken dinamik olarak "yığınları değiştirebilme" ihtiyacım vardı; Şoförün kazayla kazara üflediğini biliyordum çünkü sonunda ekran hafızasına yazıyordu ve daha sonra, sorunun hangi ekrana doğrudan yazıldığına bakarak hata ayıklayabiliyordum. Ah, o günlerdi.
Hata ayıklayıcısını, özellikle de İhlal İhlali ve Yığın Taşması gibi kötü durumları bile ele alan özel durumları yakalamak için zorlamaya çalışın. Bunu Debug -> İstisnalar bölümünde yapabilirsiniz. Üçüncü taraf DLL'nin tüm özel durumları yakalaması ve daha sonra tüm programdan çıkan exit() veya bazı benzer güzelliği çağırması mümkündür.
Ben StackOverflow ve AccessViolation istisnalar hem atılır, ancak yine, hiçbir şey atılır ki ayarlayın. – sbenderli
Bu dll için kullanılabilir hata ayıklama sembolleriniz var mı? Bu DLL hangi dilde yazılmıştır? Yönetilen veya yönetilmeyen bir DLL mi? Ayrıca istisnalar penceresindeki her şeyi kontrol etmeyi deneyebilir ve bekleyebilirsiniz :) –
Bu bir interop dll'dir. .NET framework yüklü ise, Primary Interop Assembly de Global Assembly Cache (GAC) içine yüklenir diyor. Bu yönetilen anlamına mı geliyor? – sbenderli
Windows Olay Günlüğü'u kontrol ettiniz mi? Buna Yönetici Araçları menüsü> Etkinlik Görüntüleyici'den erişebilirsiniz. Özellikle Uygulama ve Sistem kayıtlarını kontrol edin.
Günlüklerinde hiçbir şey yok :( – sbenderli
Üçüncü taraf dll'niz yönetiliyorsa, Runtime Flow (benim tarafımdan geliştirilmiştir) kullanarak, çökmeden önce içinde ne olduğunu görebilirsiniz - yığın taşması, zorlu çıkış veya istisna açıkça tanımlanabilir.
- 1. Üçüncü taraf DLL dosyasını PowerShell
- 2. Üçüncü taraf kitaplıklarını .NET DLL ile nasıl/nerede gönderirim?
- 3. Java Üçüncü taraf kitaplıkları
- 4. Python'da bir özel durumun yığın izlemesini program aracılığıyla nasıl denetlersiniz?
- 5. Üçüncü Taraf Kodu ve Git
- 6. Üçüncü taraf lib eski sürüm
- 7. iPad üçüncü taraf takvimi bileşeni
- 8. Xamarin.iOS üçüncü taraf frameworküyle ciltleme
- 9. Üçüncü Taraf Sayfalarda JavaScript Enjeksiyonu
- 10. Üçüncü taraf Visual Studio parçacıkları
- 11. Python'da üçüncü taraf bir modülü nasıl alırım?
- 12. Üçüncü taraf bir SAS PROC nasıl geliştirilir?
- 13. , özel ve üçüncü taraf/doğal uygulamalar arasında ayrım yapar; django
- 14. iOS8 UIKeyboardWillShowNotification Üçüncü taraf klavye yüksekliği
- 15. htmlpurifier, üçüncü taraf kaynak onavantajı kaynağı
- 16. Referans için üçüncü taraf DLL'leri koymak için en uygun yer
- 17. Bağımlılıklar içeren bir WiX özel eylem DLL dosyası nasıl çalıştırılır
- 18. Movilizer: Üçüncü taraf kimlik doğrulamasını kullanma
- 19. Github, kuruluşlara üçüncü taraf erişimini kısıtlıyor
- 20. Üçüncü taraf kaynak dosyalarındaki uyarılar nasıl bastırılır?
- 21. Django'nun üçüncü taraf uygulamaları ile I18N
- 22. En kullanışlı üçüncü taraf iPhone çerçeveleri hangileridir?
- 23. Facebook'a bağlanma ve üçüncü taraf çerezleri?
- 24. LibStatusBar simgesi üçüncü taraf uygulama başladığında kayboluyor
- 25. Hangi üçüncü taraf Analytics SDK'leri TVOS'u destekliyor?
- 26. Üçüncü taraf OSGI paketini maven aracılığıyla dağıtın
- 27. Veracode'da üçüncü taraf kitaplıklarını taramaktan kaçının
- 28. MVP mimarisini üçüncü taraf SDK'larla nasıl izlerim?
- 29. Üçüncü taraf .flow dosyaları nasıl tüketilir?
- 30. AngularJS - üçüncü taraf eklenti varsayılanları nereye yerleştirilir?
Bir programın arkasından çıkan en tipik neden, herhangi bir hata iletisi veya hiçbir şey yok, yığın taşmasıdır. Bu durumda, program hata mesajını sunmak için yeterli yığına sahip değildir ve Windows bunu sonlandırır. Bu olabilir mi? –
VS'yi, dark_charlie'nin yorumuna göre StackOverflow ve AccessViolation istisnalarını atmasını sağlayacak şekilde ayarlıyorum.ama hiçbir şey olmuyor – sbenderli