Fatal Error: bu nima, asosiy sabablari va oldini olish yo'llari

Muallif: IT Sectr Nashr etilgan: 2026-05-27 O'qish vaqti: 8 daq

Fatal Error — bu ilovaning darhol ishdan chiqishiga olib keladigan tanqidiy xato (crash). Non-fatal errordan farqli o‘laroq, fatal xato dasturga tiklanish imkoniyatini qoldirmaydi — jarayon operatsion tizim yoki runtime muhiti tomonidan favqulodda to‘xtatiladi. Firebase Crashlytics 2024 ma’lumotlariga ko‘ra, o‘rtacha ilova har bir crashdan keyin foydalanuvchilarning 2.5% ini yo‘qotadi va fatal xatolarni bartaraf etish mobil ishlanmada birinchi raqamli ustuvorlikdir. Crash-free rate qanchalik yuqori bo‘lsa, ilovaning do‘konlardagi reytingi shunchalik yuqori va foydalanuvchilar oqimi shunchalik kam bo‘ladi.

Asosiy fikrlar

  • Fatal Error — ilovaning darhol crash bo‘lishiga sabab bo‘ladigan tanqidiy xato
  • Null-pointer — mobil ilovalarda fatal xatolarning eng keng tarqalgan sababi
  • Non-Fatal Error — ilovani to‘xtatmaydigan muqobil xato turi
  • Crashlytics va Sentry fatal xatolarning stack tracelarini avtomatik yig‘adi
  • Oldini olish safe unwrapping, defensive programming va testlashni o‘z ichiga oladi

Fatal Error nima

Fatal Error — bu dasturning keyingi bajarilishi mumkin bo‘lmagan xato. Operatsion tizim yoki virtual mashina ma’lumotlarning shikastlanishini oldini olish uchun jarayonni to‘xtatadi. iOS-da fatal xato SIGABRT yoki SIGSEGV signaliga, Android-da esa ildiz handlerga yetib boradigan va jarayonni to‘xtatadigan boshqarilmagan istisnoga sabab bo‘ladi. Ilova darhol yopiladi, foydalanuvchi bosh ekranga qaytadi.

Fatal xatoning belgilari

Fatal xatoning xarakterli belgilari: to‘liq stack trace bilan crash hisoboti, ilovaning kutilmagan yo‘qolishi, tizim jurnalida jarayonning to‘xtatilishi haqida yozuv, yopilishdan oldin qora yoki oq ekran. Foydalanuvchi seansni tiklash imkoniyatisiz bosh ekranni ko‘radi — ilovani nol holatidan qayta ishga tushirish kerak. iOS-da crash Xcode Organizer orqali mavjud bo‘lgan .crash fayliga yoziladi.

Biznes metrikalarga ta’siri

Har bir crash foydalanuvchi retensiyasiga salbiy ta’sir ko‘rsatadi. Google Play Console 2024 ma’lumotlariga ko‘ra, crash-free rate 99.5% dan past bo‘lgan ilovalar qidiruv va tavsiyalarda past reyting oladi. Crash-rate App Store va Google Play uchun asosiy sifat ko‘rsatkichlaridan biridir — fatal xatolarning yuqori darajasi yangilanishlarning nashr etilishini bloklashi mumkin. Moliya va tibbiyot ilovalari uchun crash-free rate 99.9% dan past qabul qilinishi mumkin emas.

Fatal xatolarning sabablari

Null-pointer dereference — mobil ilovalarda fatal xatolarning asosiy sababi. Null ga teng bo‘lgan ob’ektning xususiyati yoki metodiga murojaat qilish Android-da NullPointerException, iOS-da EXC_BAD_ACCESS ni keltirib chiqaradi. JetBrains 2023 ma’lumotlariga ko‘ra, barcha ishlab chiqarish crashlarining taxminan 28% null ko‘rsatkichlar bilan bog‘liq. Kotlin-da null-safety tizimi bu foizni sezilarli darajada kamaytiradi, ammo force unwrap va Java mosligi muammo manbai bo‘lib qolmoqda.

Index-out-of-bounds

Mavjud bo‘lmagan indeks bo‘yicha kolleksiya elementiga murojaat — crashlarning chastota bo‘yicha ikkinchi sababi. Java va Kotlin-da bu ArrayIndexOutOfBoundsException, Swift-da fatal error: Index out of range. Ko‘pincha filtrlash yoki kolleksiya hajmining dinamik o‘zgarishidan keyin ro‘yxatlar bilan ishlashda yuzaga keladi. getOrNull (Kotlin) yoki indices.contains (Swift) kabi xavfsiz usullardan foydalanish bu turdagi fatal xatolarning oldini oladi.

Resurslar bilan bog‘liq crashlar

Xotiraning yetishmasligi (OutOfMemoryError), stekning toshib ketishi (StackOverflowError), mavjud bo‘lmagan resursni yuklash — resurs xatolari ko‘pincha fataldir va takrorlash qiyin. OutOfMemoryError katta tasvirlarni siqilmasdan yuklashda yoki bo‘shatilmagan referenslar tufayli xotira oqishida yuzaga keladi. StackOverflowError — tayanch holatisiz chuqur rekursiya yoki delegatlar zanjirida tsiklik chaqiruvlarda.

Concurrency xatolari

Deadlock, race condition, iteratsiya paytida kolleksiyani o‘zgartirish — ko‘p oqimli xatolar noaniq namoyon bo‘ladi va tashxis qo‘yish eng qiyin. Android-da turli oqimlardan ArrayList ni o‘zgartirishda ConcurrentModificationException, iOS-da sinxronizatsiyasiz NSMutableArray ni o‘zgartirish tufayli crash. Kotlin korutinlari (structured concurrency) yoki Swift Actors (iOS 16+) concurrency crashlari ehtimolini kamaytiradi.

Fatal Error vs Non-Fatal Error

Asosiy farq — tiklanish imkoniyati. Non-Fatal Error dasturning ishlashni davom ettirishiga imkon beradi: tarmoq timeouti try-catch bilan boshqariladi, parse xatosi standart qiymat bilan almashtiriladi. Fatal Error ning bunday yo‘li yo‘q — crash muqarrar va ilovani qayta ishga tushirish kerak. Ushbu xato turlari orasidagi chegara ilova arxitekturasi bilan belgilanadi.

XususiyatFatal ErrorNon-Fatal Error
Ilovaning to‘xtatilishiHaYo‘q
TiklanishMumkin emascatch bloki orqali mumkin
Ma’lumot yig‘ishFaqat crash-reporterKoddan loglash
UX zarariSeansning to‘liq buzilishiVaqtinchalik noqulaylik
Odatiy misolNullPointerExceptionIOException

Xuddi shu xato bir platformada fatal va boshqasida non-fatal bo‘lishi mumkin. Nolga bo‘lish Java/Kotlin-da ArithmeticException ni chiqaradi (fatal emas — tutib olish mumkin), Swift-da fatal error: Division by zero (tutib olish imkoniyatisiz crash). Dasturchi xatolarni boshqarishni loyihalashda muayyan til va runtime muhitining xatti-harakatini hisobga olishi kerak. Fatal va non-fatal o‘rtasidagi chegarani tushunish — bardoshli mobil ilova arxitekturasini qurishning asosidir.

Fatal xatolarni aniqlash

Firebase Crashlytics — mobil ilovalarda crashlarni aniqlash uchun de-fakto standart. SDK avtomatik ravishda stack trace, qurilma holati, operatsion tizim versiyasi va crashdan oldingi jurnallarni yig‘adi. Dashboard bir xil crashlarni bitta issue-da guruhlaydi, ta’sirlangan foydalanuvchilar sonini, takrorlanish chastotasini va crash sodir bo‘lgan ilova versiyasini ko‘rsatadi.

kotlin
// Android ilovasida Crashlytics ni ishga tushirish
class MainApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        FirebaseApp.initializeApp(this)
        Crashlytics.setCustomKey("build_type", "production")
    }
}

// Crash diagnostikasi uchun foydalanuvchi ma’lumotlarini sozlash
Crashlytics.setUserId("user_12345")
Crashlytics.setCustomKey("screen", "ProfileFragment")
Crashlytics.setCustomKey("api_response", responseCode)

// Integratsiyani test qilish uchun majburiy crash
Crashlytics.crash()

Sentry — batafsilroq diagnostika bilan muqobil yechim. Sentry nafaqat stack trace, balki barcha o‘zgaruvchilarning holatini, xatogacha bo‘lgan voqealar ketma-ketligini va ijro kontekstini ham ko‘rsatadi. Sentry-dagi Breadcrumbs fatal xatodan oldin foydalanuvchining harakatlar zanjirini tiklashga imkon beradi: tugma bosishlar, ekranlar orasidagi o‘tishlar, tarmoq so‘rovlari. Sentry-da sifatni kompleks tahlil qilish uchun samaradorlik va sessiyalar monitoringi mavjud.

Simvollashtirish va deobfuskatsiya

iOS-da crashlarni to‘g‘ri aniqlash uchun Crashlytics yoki Sentry-ga dSYM fayllarini (debug symbols) yuklash talab qilinadi. dSYM bo‘lmasa, stack trace funksiya nomlari o‘rniga faqat xotira manzillarini o‘z ichiga oladi. Android uchun ProGuard yoki R8 dan foydalanishda mapping fayllarini yuklash talab qilinadi. Xcode-da build phase yoki Gradle plugin orqali dSYM yuklashni avtomatlashtirish ishlab chiqarish qurilmalari uchun majburiydir.

Fatal xatolarning oldini olish

Asosiy oldini olish usuli — barcha optional va nullable qiymatlarning safe unwrapping i. Swift-da if-let va Kotlin-da ?: bilan let dan foydalanish null-pointer xatolarini bartaraf qiladi. Qiymat mavjudligiga kafolatsiz hech qanday force unwrap. Kotlin va Swift kompilyatorlari ikkalasi ham potensial xavfli operatsiyalar haqida ogohlantiradi — ishlab chiqarish kodida bu ogohlantirishlarni e’tiborsiz qoldirib bo‘lmaydi.

swift
// Safe unwrapping orqali FATAL ERROR NI OLDINI OLISH
func processUser(id: String) -> String {
    guard let user = database.findUser(by: id) else {
        return "User not found"
    }
    guard let email = user.email else {
        return "Email not set"
    }
    return email
}

// Kolleksiya elementlariga xavfsiz murojaat
func safeGet <T>(items: [T], index: Int) -> T? {
    guard items.indices.contains(index) else { return nil }
    return items[index]
}

// Murojaatdan oldin massiv chegaralarini tekshirish
let numbers = [1, 2, 3]
if numbers.indices.contains(5) {
    print(numbers[5])
} else {
    print("Index out of range")
}

Defensive programming — ikkinchi himoya darajasi. Har doim funksiyalarning kirish parametrlarini tekshiring, force unwrap o‘rniga Optional yoki Result qaytaring, ishlab chiqish bosqichida xatolarni erta aniqlash uchun debug qurilmalarida assert dan foydalaning. Chegara holatlari (null, bo‘sh kolleksiyalar, noto‘g‘ri indekslar) uchun birlik testlari ilova biznes mantiqining barcha ochiq kirish nuqtalarini qamrab olishi kerak.

UI qatlami uchun Error Boundary

React Native va SwiftUI-da error boundary o‘rnatish mumkin — render paytida fatal xatolarni tutadigan va crash o‘rniga zaxira interfeysni ko‘rsatadigan komponent. Bu foydalanuvchi tajribasi nuqtai nazaridan fatal UI xatosini non-fatalga aylantiradi — ilova ishlashda davom etadi va foydalanuvchi oq ekran o‘rniga interfeysning muayyan blokida xato xabarini ko‘radi.

CI/CD da crash tekshiruvlari

CI/CD pipeline-iga avtomatik tekshiruvlarni integratsiyalash: statik tahlil (Kotlin uchun Detekt, Swift uchun SwiftLint), real qurilmalarda UI testlarini ishga tushirish, test muhitida crash-free rate ni tekshirish. Crash-rate chegarasidan oshganda mergeni bloklash (tavsiya etilgan chegara — commit boshiga 0.1% dan ortiq yangi crash).

Ko‘p beriladigan savollar

Fatal errordan keyin tiklanish mumkinmi?

Yo‘q, fatal error dan keyin tiklanish mumkin emas — jarayon OT darajasida to‘xtatiladi. Yagona yo‘l — fatal xatoning yuz berishining oldini olish xavfsiz konstruksiyalar, defensive programming va ishlab chiqish bosqichida chegara holatlarini har tomonlama test qilish orqali.

Fatal error segfaultdan nima bilan farq qiladi?

Segfault (SIGSEGV) — ruxsat etilmagan xotira maydoniga murojaat qilishda yuzaga keladigan fatal error turlaridan biri. FATAL ERROR — segfault, abort, stack overflow, out of memory va runtime-da boshqarilmagan istisnolarni o‘z ichiga olgan barcha qaytarilmas xatolar uchun umumiy tushuncha.

Ishlab chiqarishda fatal error-ni avtomatik qanday yig‘ish mumkin?

Crashlytics (Firebase) yoki Sentry SDK integratsiyasi barcha boshqarilmagan istisnolarni avtomatik yig‘adi. SDK OT signallari va runtime istisnolarini tutadi, stack trace va kontekst bilan crash hisobotini yaratadi va ilovaning keyingi ishga tushirilishida serverga yuboradi.

Fatal error bilan stsenariylarni qanday test qilish kerak?

Crashlarni boshqarishni test qilish uchun debug qurilmasida force crash dan foydalaniladi. Crashlytics fatal xatoni simulyatsiya qilish uchun crash() metodini taqdim etadi. Birlik testlarida guard va if-let ning to‘g‘riligi tekshiriladi, UI testlari esa ma’lumot kiritish va interfeys holatining chegara holatlarini qamrab oladi.

Mobil ilovalarda barcha istisnolar fatalmi?

Yo‘q, faqat boshqarilmagan istisnolar fatal bo‘ladi. Try-catch bilan tutilgan istisno non-fataldir. Boshqarilgan va boshqarilmagan istisno o‘rtasidagi farq ilovaning yopilishi yoki foydalanuvchi tajribasiga minimal zarar bilan muqobil holatda ishlashda davom etishini aniqlaydi.

Xulosa

  • Fatal Error — crash va ilova jarayonining to‘xtatilishiga olib keladigan qaytarilmas xato
  • Null-pointer — fatal xatolarning asosiy sababi (JetBrains ma’lumotlariga ko‘ra barcha ishlab chiqarish crashlarining 28%)
  • Non-Fatal Error — ilovani to‘xtatmaydigan boshqarilgan istisno (tarmoq timeouti, parse xatosi)
  • Crashlytics — mobil ilovalarda crashlarni avtomatik yig‘ish va tahlil qilish uchun asosiy vosita
  • Safe unwrapping — Swift va Kotlin-da fatal xatolarning oldini olishning asosiy usuli
  • Defensive programming — kirish parametrlari, indekslar va chegara holatlarini tekshirish
  • Error Boundary — fatal UI xatosini foydalanuvchi uchun non-fatalga aylantiruvchi komponent

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing