Gizleme hatası - Error hiding

İçinde bilgisayar Programlama, hata gizleme (veya yutma hatası) bir hatayı yakalama uygulamasıdır veya istisna ve ardından hatayı yazılımın diğer bölümlerine kaydetmeden, işlemeden veya bildirmeden devam etme. Hataları bu şekilde ele almak kötü bir uygulama olarak kabul edilir[1] ve bir desen karşıtı içinde bilgisayar Programlama. İle dillerde istisna işleme desteği, bu uygulamaya istisna yutma.

Hataların ve istisnaların birkaç amacı vardır:

  • Yazılım geliştiricilerinin, bir günlük sistemiyle birleştirildiğinde, bir kullanıcı yazılımı çalıştırdığında ortaya çıkan sorunları bulmalarına ve anlamalarına yardımcı olun
  • Bir UI'de gösterilen anlamlı hata mesajları, hata kodları veya hata türleri ile birleştirildiğinde, konsol mesajları olarak veya bir API'den döndürülen verilerle birleştirildiğinde (yazılımın türüne ve kullanıcı türüne bağlı olarak) yazılımın kullanıcısına yararlı bilgiler sağlayın
  • Normal çalışmanın devam edemeyeceğini belirtin, böylece yazılım gerekli görevi yerine getirmenin alternatif yollarına geri dönebilir veya işlemi iptal edebilir.

Hatalar yutulduğunda bu amaçlara ulaşılamaz. Hatayla ilgili bilgiler kaybolur ve bu da sorunların izini sürmeyi çok zorlaştırır. Yazılımın nasıl uygulandığına bağlı olarak, istenmeyen yan etkilere neden olarak diğer hatalara dönüşerek sistemi kararsız hale getirebilir. Sorunun temel nedeni hakkında bilgi olmadan, neyin yanlış gittiğini veya nasıl düzeltileceğini anlamak çok zordur.

Örnekler

İstisnai işlemlerin olduğu diller

Bunda C # örnek, içindeki kod olsa bile Deneyin blok bir istisna atar, battaniyeye yakalanır tutmak fıkra. İstisna yutuldu ve ele alınmış kabul edildi ve program devam ediyor.

Deneyin {  atmak yeni İstisna();} tutmak {  // hiçbir şey yapma}

Bunda Güç kalkanı örnek tuzak yan tümce, fırlatılan istisnayı yakalar ve yürütmeye devam ederek onu yutar. "Burada olmamalıyım" mesajı, hiçbir istisna olmamış gibi gösterilir.

&{   tuzak { devam et }  atmak  yazma çıkışı "Burada olmamalıyım"}

İstisna yutma, istisna farklı bir istisna olarak ele alınır ve yeniden ifade edilirse, orijinal istisna ve tüm bağlamı atılırsa da olabilir.

Bu C # örneğinde, türden bağımsız olarak tüm istisnalar yakalanır ve yalnızca orijinal istisnanın mesajını koruyarak yeni bir genel istisna atılır. Özgün yığın izi, orijinal özel durumun türü ile birlikte kaybolur. Orijinal istisna, diğer istisnalar için bir sarmalayıcıysa, bu bilgi de kaybolur.

Deneyin {} tutmak(İstisna eski) {    atmak yeni İstisna(eski.İleti);}

Bilgileri kaybetmeden istisnaları yeniden atmanın daha iyi bir yolu, orijinal istisnayı tutmak fıkra:

Deneyin {} tutmak(İstisna eski) {    atmak;}

Alternatif olarak, orijinal istisnayı saran yeni bir istisna oluşturulabilir, böylece diğer tüm işleyiciler her ikisine de erişebilir:

Deneyin {} tutmak(İstisna eski) {    atmak yeni İstisna(eski);}

Diğer diller

İçinde Git, hatalar bir döndürülerek yayılır Hata normal işlev dönüş değeri ile birlikte nesne. Bu örnekte olduğu gibi göz ardı edilebilir.

f, _ := "Burada olmamalıyım", hatalar.Yeni("")fmt.Yazdır(f)

Bu durumuda C sistem çağrıları, hatalar çağrının dönüş değeri ile belirtilir BOŞve hata bilgileri genel bir errno değişken. Bu kod, dosya erişmeden önce geçerlidir, ancak fopen başarısız oldu, hata yutuldu.

DOSYA *dosya = fopen("", "r");Eğer (dosya) {  // dosyayla bir şeyler yap}

Nedenleri

Hata yutmanın en yaygın altında yatan neden, geliştirici yazılım oluştururken iyi günlük kaydı araçlarının ve süreçlerinin olmamasıdır. Kolaylıkla çözülemeyen bir hatayla karşılaşıldığında, geliştiricinin iyi günlük kaydı araçları varsa, beklenmedik bir hatayı günlüğe kaydetmek, geliştiriciye herhangi bir zaman veya çaba harcamaya neden olmaz. Hatanın günlüğe kaydedilmesi basit (bir yöntem çağrısı), hızlı (uygulama performansını etkilemeden), güvenli (herhangi bir hata veya istisna oluşturmaz) ve hatanın türünü ve ilgili herhangi bir şeyi kaydederek tüm bilgilerin kaydedilmesini sağlamalıdır. onunla ilişkili veriler, yığın izleme hata (böylece geliştirici, hatanın tam olarak nerede oluştuğunu ve hangi talimatların buna yol açtığını belirleyebilir) ve hatanın zaman damgası.

Geçici istisna işleyicileri

İle dillerde kontrol edilen istisnalar, bir yöntemde ortaya çıkan tüm istisnalar, o yöntemin imzasında listelenmelidir. Yazılımın prototipini oluştururken ve uygularken, kod sıklıkla değişir; bu, bir yöntemde ortaya çıkabilecek istisna türlerinin de sık sık değiştiği anlamına gelir. Bir şey her değiştiğinde yöntem imzasını ayarlamak zorunda kalmak, gelişimi yavaşlatır ve sinir bozucu olabilir, bu nedenle büyük kod değişiklikleri yaparken geçici bir önlem olarak istisnaları yutmak caziptir. Bu geçici istisna işleme kodu, yayımlanan kod tabanında sona erebilir.

Kontrol edilmiş istisnalar olmayan dillerde bile, prototip oluşturmayı hızlandırmak için büyük kod değişiklikleri yapılırken geçici istisna işleyicileri eklenebilir ve bu da hataların yutulmasına neden olabilir.

Çökmeleri önleme

Yazılımın herhangi bir nedenle çökmemesi gereken durumlarda, hata yutma, bir programcının kolayca düşebileceği bir uygulamadır. Örneğin, bir Eklenti başka bir uygulama içinde çalışan uygulamanın, tüm hataları ve istisnaları, gömülü olduğu uygulamayı çökertmeyecek şekilde işlemesi beklenir. Hataların ve istisnaların üstü kapalı şekilde yakalanması, her ne pahasına olursa olsun çökmeleri önlemeye çalışırken içine düşmesi kolay bir modeldir ve bunu kötü kayıt araçlarıyla birleştirdiğinizde, hata yutma meydana gelebilir.

Kullanıcılardan karmaşıklığı gizleme

Bir masaüstü uygulamasında anlamsız bir hata mesajı içeren hata iletişim kutusu

Kullanıcılara hataları gösterirken, şifreli teknik hataları, ne olduğunu ve sorunu çözmek için varsa kullanıcının hangi eylemleri yapabileceğini açıklayan mesajlara dönüştürmek önemlidir. Teknik hataların bu şekilde anlamlı kullanıcı mesajlarına çevrilmesi sırasında, belirli hatalar genellikle daha genel hatalar halinde gruplandırılır ve bu işlem, kullanıcı mesajlarının o kadar işe yaramaz hale gelmesine neden olabilir ki, kullanıcı neyin yanlış gittiğini veya nasıl düzeltileceğini bilemez. Kullanıcı söz konusu olduğunda, hata yutuldu.

Ayrıca bakınız

Referanslar

  1. ^ "IBM En İyi Uygulama: Java İstisnalarını yakalama ve yeniden fırlatma". www-01.ibm.com. 2009-06-24. Alındı 2019-05-02.