İstisna işleme

oy
2

Yapılandırılmış İstisna kötü Handling mı? istisnalar işlemek için doğru yolu nedir?

DÜZENLEME: İstisna C # kullanarak .NET Handling.

Genellikle catch (İstisna ex) belirli istisna sınıfları (DivideByZeroException'ı, ArrayTypeMismatchException) bir dizi var ve bir jenerik yok.

Bunun arkasındaki düşünce oluşmadan ve beklenmedik durumlar arayüzü (ya pencere veya web) kadar yükselirdi zaman oluşur ve tanımlanmış belirli eylemleri için istisna belirli türlerde bekliyordunuz. Bu iyi bir uygulama mı?

Oluştur 09/12/2008 saat 15:31
kaynak kullanıcı
Diğer dillerde...                            


5 cevaplar

oy
6

Sana 'yapılandırılmış istisna işleme' ile ne demek emin değilim.

istisna işleme yapılabilir kötü şey 'kırlangıç' istisna veya sessizce idare etmektir.

Bunu yapma:

try {
   ...
}
catch (Exception e) {
   //TODO: handle this later
}

Bu çok sık derlemek için kodu almak için tembellik dışarı yapılır. Belirli bir seviyede istisna nasıl işleneceğini bilmiyorsanız, yöntem, bir yakalayacağım üstündeki tüm işleyicisi var en azından istisna ve var. Sorun sonunda sabit olsun, böylece (a destek kişiye GUI, bir sayfa / e-posta yoluyla, log dosyası) bir şekilde geri bildirim sağlayın. Sessizce hemen hemen her zaman bir istisna yakalamak sonra oluyor daha büyük bir soruna yol açar ve onu izlemek zordur olmak.

Cevap 09/12/2008 saat 15:39
kaynak kullanıcı

oy
3

Yakalama ifadeleri + Yığın izleri. Bir hata oluşursa ve günlük dosyaları boş ya da muğlak ya olduğunda hiç bir yığın izleme yazdırmadan bir istisna yakalamak etmeyin, siz veya bir başkası Yakalama bloğunda tekrar yer yığın izleri bu kodu ödeme gerekecektir.

Cevap 09/12/2008 saat 15:33
kaynak kullanıcı

oy
1

Bu Orada kod potansiyel hataları ile uğraşmak istisna işleme ... inline, başlıca iki türü vardır kod bir yöntem ya da rutin ile satır içi olduğunu ... Orada kitaplar bu konuda ... ama ... karmaşık bir konudur "normalde" yürütme ve kod başka bir yerde olduğunu yapılandırılmış istisna işleme, ve teh altyapı bir beklenmedik bir olay (bir hata) oluştuğunda otomatik olarak bu durum işleme koduna switych için tasarlanmıştır istiyoruz ... Hem advantedges ve Dezavantajları var. "Satır içi" yaklaşımı okumak ve korumak için daha fazla (hata kodu ile) karmaşık ve daha sert bir kod üretme eğilimindedir. Ama içi hata işleme kullanırken, herhangi bir peşin analiz edilmesini gerektirmez olarak ön üretmek için daha kolay, sık sık yöntemleri, boolean veya sayısal "hata" kodlarını dönen metjhod veya rutin başarılı olup olmadığını arayana indiocating görüyoruz. Bu durum işleme yapılandırılmış kullanırken (hata kodu geri dönmelidir Kongre tarafından her fonksiyonu beri) rutin "dönüş" anlamlı bir iş değeri veya nesneyi, sahip "işlevsel" sözdizimi ortadan kaldırır, bu konu tartışmaya açıktır.

Yapılandırılmış istisna işleme, OTOH, genel olarak muhtemelen üretebilir rutin hangi hataları veya yöntem olarak ön analiz yukarı gerektirdiği şekilde iyi yapmak zordur ve yöntem ya da her hata hakkında yapmaları gerekenler konusunda ortaya çıksa bile bu.

Kesin olan tek şey, tek bir bileşende iki yaklaşımı bir arada kullanmayın ...

Cevap 09/12/2008 saat 15:59
kaynak kullanıcı

oy
1

Benim tavsiyem:

sürece bir istisna yakalamak etmeyin:

  • Bunun yapılmaması (bir olay işleyicisi örn) uygulaması çökmesine neden olur
    • Ne olduğunu bilmek, böylece Ve bu durumda, durum oturum emin olun ve ne zaman
  • Sen (bazen program akışını denetlemek için kullanılmamalıdır bir istisna (yani durum işleme unutmayın atar harici API çağrılırken örneğin bir yeniden deneme mekanizması uygulayan)) denemek ve durumu düzeltmek için bir şeyler yapabiliriz
    • Ve bu durumda, sadece atılmış olsun bekliyoruz belirli istisna türünü yakalamak

mümkün olan en yüksek seviyede istisna yakalamak size günlükleri geçiyor ve ilk eylem ilk etapta özel duruma yol açan olaylar dizisini tetikleyen ne olduğunu görmek için çalışırken çok yararlıdır maksimum çağrı yığını, almak anlamına gelir .

Cevap 09/12/2008 saat 15:45
kaynak kullanıcı

oy
0

Ben Windows programcı değilim ama yazılım istisnalar gibi donanım istisnalar tedavisinde özel durum işleme yapılandırılmış kullanarak anlamına gelir geliyor bana:

  • Kodunuz C ++ standart (Sıfırla bölme gibi) tanımsız veya uygulama tanımlı davranış üretir şey yapar.
  • , Windows SEH etkinleştirilmiş olarak bu durumda bir istisna atar olduğunu tanımlar.
  • Sen özel durumu yakalamak ve / veya sonlandırma işleyicisi yürütmek için bu gerçeği kullanıyor.

soruları sormak Yani, IMO, şunlardır:

  • Programlama görev standart C ++ işleyemez bir doğa gerçekten var mı? (Veya yalnızca donanım istisna izin vererek ne elde etmek ölçülebilir aşağı bir şekilde işleyebilir).
  • Gerçekten kod standart dışı gittiğinde eylemde gerekiyor mu?
  • İlk etapta donanım istisnalar provoke etmeyecek şekilde kodunuzu yazabilir mi?

cevabı 'evet', 'evet', 'hayır', daha sonra yapılandırılmış özel durum işleme ihtiyaç vardır. Aksi halde bu durumda muhtemelen istiyorum bunu önlemek mümkün olabilir. durum korumalı kod yazma zor, bu yüzden daha güçlü istisna daha iyi sunabilir garanti eder. belki SEH ile sıfıra bölen Kod nothrow garantisi sunmamaktadır, belki yeniden tasarımı bir parça arayanlar bunu Duff verilerini vermeyin böylece zaman, bunu yapabilirdi. Bir fonksiyon başka nedenlerden dolayı istisnalar atmak zorunda kalırsa, o zaman da belki işler kötü hale getirebileceğini donanım tuzakları onları atma.

Kayda değer bir özel durum bellek ayırma olduğunu. Emin değilim .NET yapar, ancak linux tahsisi üzerinde sadece tahsisi için yeterli sanal adres alanı varsa başarısız olursa. Fiziksel bellek ilk kullanımda kararlıdır ve yeterli değilse bir donanım duruma neden olur edilir. Bellek ayırma olduğundan sözde başarısızlık üzerinde std :: bad_alloc atmak ve uygulama standardının bu gereksinimi uygulamak için başarısız, o olabilir yazılıma donanım istisna dönüştürme bazı durumlarda bu yapılacak doğru şey olduğunu olun. Ancak, bu donanım istisna (eğer nothrow sanıyordum rutinleri içinde dahil), beklenmedik yerlerde ortaya çıkabilir, bu nedenle hala linux çekirdek yerine atma döker neden olan, incelikle ele imkansız olabilir. Uygulamada, bir yazılım istisna yerine faydalı olacaktır tahsisi için yeterli sıklıkta yakın yapıcısını, kilitlenmesine tam olarak başlatıldığını alır şey.

Cevap 09/12/2008 saat 16:06
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more