Yashirish xatosi - Error hiding

Yilda kompyuter dasturlash, xato yashirish (yoki yutish paytida xato) - bu xatoga yo'l qo'ymaslik yoki istisno va keyin tizimga kirmasdan, ishlov bermasdan yoki dasturiy ta'minotning boshqa qismlariga xato haqida xabar bermasdan davom eting. Ushbu usulda xatolar bilan ishlash yomon amaliyot deb hisoblanadi[1] va an naqshga qarshi yilda kompyuter dasturlash. Bilan tillarda istisno bilan ishlashni qo'llab-quvvatlash, bu amaliyot deyiladi istisno yutish.

Xatolar va istisnolar bir nechta maqsadlarga ega:

  • Dastur ta'minotchilariga foydalanuvchi dasturiy ta'minotni ishlatganda, tizimni tizimga qo'shilganda yuzaga keladigan muammolarni kuzatib borish va tushunishga yordam bering
  • Dasturiy ta'minot foydalanuvchisiga mazmunli xato xabarlari, foydalanuvchi interfeysida ko'rsatilgan xato kodlari yoki xato turlari, konsol xabarlari yoki API-dan qaytarilgan ma'lumotlar (dastur turiga va foydalanuvchi turiga qarab) bilan birlashtirilgan holda foydali ma'lumot bering.
  • Oddiy ishlashni davom ettirish mumkin emasligini ko'rsating, shuning uchun dasturiy ta'minot kerakli vazifani bajarishning muqobil usullariga qaytishi yoki operatsiyani bekor qilishi mumkin.

Xatolar yutilganda, ushbu maqsadlarga erishib bo'lmaydi. Xato haqida ma'lumot yo'qoladi, bu muammolarni izlashni juda qiyinlashtiradi. Dastur qanday amalga oshirilishiga qarab, u tizimni beqarorlashtiradigan va boshqa xatolarga yo'l qo'yadigan kutilmagan nojo'ya ta'sirlarni keltirib chiqarishi mumkin. Muammoning asosiy sababi haqida ma'lumotsiz, nima yuz berayotganini yoki uni qanday tuzatishni aniqlash juda qiyin.

Misollar

Istisnolardan tashqari tillar

Bunda C # Masalan, ichidagi kod bo'lsa ham harakat qilib ko'ring blok istisno qiladi, u adyolga tushib qoladi ushlamoq band. Istisno yutib yuborildi va ko'rib chiqildi va dastur davom etmoqda.

harakat qilib ko'ring {  otish yangi Istisno();} ushlamoq {  // hech narsa qilmang}

Bunda PowerShell misol tuzoq band tashlanayotgan istisnoni ushlaydi va ijro etishni davom ettirib yutadi. The "Men bu erda bo'lmasligim kerak edi" xabar istisno bo'lmaganday ko'rsatiladi.

&{   tuzoq { davom eting }  otish  yozish-chiqish "Men bu erda bo'lmasligim kerak edi"}

Istisno yutish, agar istisno ko'rib chiqilsa va boshqa istisno sifatida qayta ko'rib chiqilsa, asl istisno va uning barcha kontekstidan voz kechganda ham yuz berishi mumkin.

Ushbu C # misolida barcha istisnolar turlaridan qat'i nazar tutiladi va faqat umumiy istisno xabarini saqlab yangi umumiy istisno tashlanadi. Dastlabki istisno turi bilan birga asl stacktrace yo'qoladi. Agar asl istisno boshqa istisnolar uchun o'ralgan bo'lsa, bu ma'lumotlar ham yo'qoladi.

harakat qilib ko'ring {} ushlamoq(Istisno sobiq) {    otish yangi Istisno(sobiq.Xabar);}

Ma'lumotni yo'qotmasdan istisnolarni qayta tiklashning eng yaxshi usuli - bu asl istisnoni tashlash ushlamoq band:

harakat qilib ko'ring {} ushlamoq(Istisno sobiq) {    otish;}

Shu bilan bir qatorda, asl istisno bilan o'ralgan yangi istisno yaratilishi mumkin, shuning uchun har qanday boshqa ishlovchilar ikkalasiga ham kirish huquqiga ega:

harakat qilib ko'ring {} ushlamoq(Istisno sobiq) {    otish yangi Istisno(sobiq);}

Boshqa tillar

Yilda Boring, qaytarish orqali xatolar ko'paytiriladi Xato normal funktsiyani qaytarish qiymati bilan birga ob'ekt. Ushbu misolda bo'lgani kabi, uni e'tiborsiz qoldirish mumkin.

f, _ := "Men bu erda bo'lmasligim kerak edi", xatolar.Yangi("")fmt.Chop etish(f)

Bo'lgan holatda C tizim qo'ng'iroqlari, xatolar qo'ng'iroqning qaytish qiymati bilan ko'rsatilgan NULLva xatolar haqidagi ma'lumotlar global miqyosda saqlanadi xato o'zgaruvchan. Ushbu kod ishonch hosil qiladi fayl unga kirishdan oldin amal qiladi, lekin agar ochmoq muvaffaqiyatsiz tugadi, xato yutildi.

Fayl *fayl = ochmoq("", "r");agar (fayl) {  // fayl bilan biror narsa qilish}

Sabablari

Xatolarni yutishning eng ko'p uchraydigan asosiy sababi - bu dasturchi dasturiy ta'minotni yaratishda yaxshi ro'yxatga olish vositalari va jarayonlarning etishmasligi. Osonlik bilan hal qilib bo'lmaydigan xatolarga duch kelganda, agar ishlab chiquvchi yaxshi ro'yxatga olish vositalariga ega bo'lsa, kutilmagan xatolarni yozish ishlab chiquvchiga hech qanday vaqt va kuch sarflamaydi. Xatolarni ro'yxatdan o'tkazish to'g'ridan-to'g'ri (bitta usul bo'yicha chaqiruv), tezkor (dasturning ishlashiga ta'sir ko'rsatmasdan), xavfsiz bo'lishi kerak (hech qanday xato va istisnolarni keltirib chiqarmaydi) va barcha ma'lumotlar saqlanishini ta'minlab, xato turi va har qanday tegishli u bilan bog'liq ma'lumotlar, stacktrace xato (shuning uchun ishlab chiquvchi xato qaerda bo'lganligini va unga qanday ko'rsatmalar sabab bo'lganligini aniq bilishi mumkin) va xato vaqt tamg'asi.

Vaqtinchalik istisno ishlovchilari

Bilan tillarda tekshirilgan istisnolar, usulda ko'tarilgan barcha istisnolar ushbu usul imzosida ko'rsatilishi kerak. Dasturiy ta'minotni prototiplashda va amalga oshirishda kod tez-tez o'zgarib turadi, ya'ni usulda istisno qilinishi mumkin bo'lgan turlar ham tez-tez o'zgarib turadi. Har safar biron bir narsa o'zgarganda uslub imzosini sozlash zarurati rivojlanishni sekinlashtiradi va asabiylashtirishi mumkin, shuning uchun katta kodni o'zgartirish paytida istisnolarni vaqtinchalik chora sifatida yutib yuborish o'ziga jalb qiladi. Ushbu vaqtinchalik istisno bilan ishlash kodi chiqarilgan kod bazasida tugashi mumkin.

Hatto tekshirilgan istisnolarsiz tillarda ham prototiplashni tezlashtirish uchun katta kodli o'zgarishlarni amalga oshirishda vaqtinchalik istisno ishlovchilarini qo'shish mumkin, bu esa xatolarni yutib yuborishiga olib kelishi mumkin.

Avariyalarning oldini olish

Dasturiy ta'minot biron bir sababga ko'ra ishdan chiqmasligi kerak bo'lgan hollarda, xatolarni yutish - bu dasturchi osonlikcha tushishi mumkin bo'lgan amaliyotdir. Masalan, a plagin boshqa dastur ichida ishlaydigan barcha xatolar va istisnolarni o'rnatilgan dastur buzilmasligi uchun bajarishi kutilmoqda. Xatolarni va istisnolarni adyol bilan ushlash - bu har qanday tarzda avariyalarni oldini olishga harakat qilishda osonlikcha tushadigan naqshdir va uni yomon loglash vositalari bilan birlashtirganda, xatolarni yutish mumkin.

Foydalanuvchilardan murakkablikni yashirish

Ish stolidagi dasturda ma'nosiz xato xabari bo'lgan xato oynasi

Foydalanuvchilarga xatolarni ko'rsatishda, sirli texnik xatolarni nima sodir bo'lganligini va foydalanuvchi muammoni hal qilish uchun qanday harakatlar qilishi mumkinligini tushuntiradigan xabarlarga aylantirish muhimdir. Ushbu texnik xatolarni mazmunli foydalanuvchi xabarlariga tarjima qilish paytida aniq xatolar ko'pincha umumiy xatolarga birlashtiriladi va bu jarayon foydalanuvchi xabarlarini shunchalik foydasiz bo'lishiga olib kelishi mumkinki, foydalanuvchi nima xato qilganini yoki uni qanday tuzatishni bilmaydi. Foydalanuvchiga kelsak, xato yutib yuborildi.

Shuningdek qarang

Adabiyotlar

  1. ^ "IBMning eng yaxshi amaliyoti: Java istisnolarini tutish va qayta tashlash". www-01.ibm.com. 2009-06-24. Olingan 2019-05-02.