Mobil ishlanmada Debug — sozlash rejimlarining mohiyati va qanday ishlashi

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

Debug (sozlash rejimi) — mobil ilovani yig'ish konfiguratsiyasi bo'lib, unda kompilyator simvolik ma'lumotni qo'shadi, kod optimallashtirishni o'chiradi va bosqichma-bosqich tahlil qilish uchun debugger ulaydi. Android Developers ma'lumotiga ko'ra, Debug yig'ishi sozlash simvollarini o'z ichiga oladi, resurslarni siqmaydi va ma'lumotlar bazasi va tarmoq so'rovlari inspektorini ulash imkonini beradi. Debug rejimi Release yig'ishiga qarama-qarshi qo'yiladi: Debug-da dasturchi kod shaffofligi uchun unumdorlikdan voz kechadi.

Asosiy

  • Debug — sozlash ma'lumoti, o'chirilgan optimallashtirish va debugger-ga kirish imkoniyati bilan yig'ish konfiguratsiyasi
  • Debugger to'xtash nuqtalarini qo'yish, o'zgaruvchilarni ko'rish va kodni bosqichma-bosqich bajarish imkonini beradi
  • Debug yig'ishi sozlash sertifikati bilan imzolanadi va ilovalar do'konlarida nashr etilishi mumkin emas
  • LLDB — iOS/macOS uchun asosiy debugger, Android Studiodagi LLDB esa Android uchun
  • Unumdorlik Debug yig'ishi Release-dan past, chunki kompilyator optimallashtirishlari yo'q

Mobil ishlanmada Debug rejimining mohiyati

Debug (sozlash) — bu shunchaki kompilyator bayrog'i emas, balki ilovani dasturchi uchun shaffof qiladigan sozlamalar to'plamidir. Debug rejimida kompilyator bajariladigan faylga simvolik nomlar jadvali (DWARF) qo'shadi, bu mashina kodini manba satrlari bilan bog'laydi. Bu jadval bo'lmasa, debugger hozirda qaysi kod satri bajarilayotganini ko'rsata olmaydi.

Debugger — ilovangizni boshqariladigan muhitda ishga tushiradigan dastur. Istalgan satrda bajarishni to'xtatib (breakpoint), joriy ko'rinish sohasidagi barcha o'zgaruvchilar qiymatlarini ko'rib, ularni joyida o'zgartirib va bajarishni davom ettirishingiz mumkin. Mobil platformalar uchun standart debugger bu LLDB — Xcode va Android Studio'da qo'llaniladigan LLVM komponenti.

Debug rejimi shuningdek Release-da o'chirilgan qo'shimcha tekshiruvlarni faollashtiradi: tasdiqlar (assertions), massiv chegaralarini tekshirish, xotira oqish detektorlari va kengaytirilgan jurnallashtirish. Bu tekshiruvlar ilova ishini sekinlashtiradi, ammo kod foydalanuvchiga yetib bormasdan oldin xatolarni rivojlanishning dastlabki bosqichlarida aniqlaydi.

Debug va Release: yig'ishlarning asosiy farqlari

Debug va Release yig'ishlari o'rtasidagi farq tubdan farq qiladi: bular kompilyator bayroqlari, imzo konfiguratsiyalari va paketlash sozlamalarining ikki xil to'plamidir. Bu farqlarni tushunish „simulyatorda ishlaydi, real qurilmada esa — yo'q” holatlaridan qochishga yordam beradi.

ParametrDebugRelease
OptimallashtirishO'chirilgan (-O0)Yoqilgan (-Os yoki -O2)
SimvollarTo'liq DWARF jadvaliStrip simvollar (olib tashlangan)
ImzoDevelopment sertifikatiDistribution sertifikati
ProfillarDebug provisioning profileApp Store / Ad Hoc profile
JurnallashtirishTo'liq (barcha darajalar)O'chirilgan yoki minimal
ObfuskatsiyaO'chirilganYoqilgan (ProGuard/R8)
.apk/.ipa hajmiKattaroq (simvollar + siqish yo'q)Kichikroq (R8 + resurslar)

Qachon nimani ishlatish kerak

Debug yig'ishi mahalliy qurilmalarda ishlab chiqish va sinovning barcha bosqichlarida qo'llaniladi. Release yig'ishi App Store Connect yoki Google Play Console-ga yuborishdan oldin yig'iladi. Release yig'ishida sozlash texnik jihatdan mumkin, ammo o'zgartirilgan metod nomlari (R8) va crash-log'lar uchun symbolication yo'qligi sababli juda noqulay.

Rejimni almashtirish muammolari

Tez-tez uchraydigan muammo — Debug-da ishlaydigan, ammo Release-da ishlamaydigan kod. Sabab — kompilyator turli optimallashtirish darajalarida turlicha ishlov beradigan UB (undefined behavior) kodidir. Odatdagi misol: ishga tushirilmagan o'zgaruvchini o'qish yoki strict aliasing buzilishi. Bunday xatolarni aniqlash uchun har bir Release yig'ishidan oldin statik analizatordan (Clang Static Analyzer, ktlint) foydalaning.

Sozlash vositalari: LLDB, to'xtash nuqtalari va inspektorlar

LLDB — C, C++, Objective-C, Swift va Kotlin/Native-ni qo'llab-quvvatlaydigan, LLVM-ga asoslangan yuqori unumdor debugger. LLDB REPL interfeysini taqdim etadi, unda ixtiyoriy ifodalarni bajarish, o'zgaruvchilar qiymatlarini o'zgartirish va to'xtatilgan ilova kontekstida funksiyalarni chaqirish mumkin.

To'xtash nuqtalari va ularning turlari

Breakpoint — debuggerning asosiy vositasi. Kod satriga nuqta qo'yasiz va bajarish shu satrga yetganda ilova to'xtaydi. LLDB bir necha turdagi nuqtalarni qo'llab-quvvatlaydi: shartli (faqat shart bajarilganda ishlaydi), simvolik (funksiya chaqiruvida) va bir martalik (bir marta ishlaydi va avtomatik o'chiriladi).

Watchpoint'lar va xotira inspektorlari

Watchpoint — o'zgaruvchining o'zgarishini kuzatish nuqtasi. Xotira manzilini ko'rsatasiz va debugger ushbu manzilga har qanday yozishda bajarishni to'xtatadi. Bu vosita ma'lumot poygalari va umumiy ob'ektlarning noto'g'ri mutatsiyalarini qidirishda ajralmasdir. UIKit iyerarxiyasini ko'rish uchun Xcode-da mavjud UIView Inspector-dan foydalaning.

lldb
// Shartli breakpoint o'rnatish
(lldb) breakpoint set --name "viewDidLoad" --condition "self.isViewLoaded == false"

// Xususiyatga watchpoint
(lldb) watchpoint set variable self->_loadingState

// To'xtash kontekstida kod bajarish
(lldb) expr self.view.backgroundColor = UIColor.redColor

Xcode va Android Studio inspektorlari

Ikkala IDE ham LLDB asosida grafik inspektorlarni taqdim etadi. Android Studio Layout Inspector (View iyerarxiyasini ko'rish), Network Inspector (HTTP so'rovlarini kuzatish) va Database Inspector (real vaqtda SQLite) ni o'z ichiga oladi. Xcode Debug Memory Graph (xotira oqish tahlili) va View Debugger (UIKit qatlamlarining 3D ko'rinishi) ni taqdim etadi.

Masofaviy sozlash va Wi-Fi orqali sozlash

Android 11 dan boshlab Wi-Fi orqali sozlash USB ulanishisiz ishlaydi: Android Studio-dan QR kodni skanerlash kifoya. iOS Xcode 9+ dan Wi-Fi sozlashni qo'llab-quvvatlaydi — qurilma bir marta USB orqali ulanadi, keyin debug seanslari tarmoq orqali o'tishi mumkin. CI serverlari uchun Wi-Fi sozlash mos emas, chunki oldindan aytib bo'lmaydigan kechikishlar va paket yo'qotishlari bo'lishi mumkin, shuning uchun avtomatlashtirilgan pipeline'larda doim USB ishlatiladi. Biroq, mahalliy ishlanma uchun Wi-Fi sozlash ancha qulay — dasturchi kabelga bog'lanmagan va xonaning boshqa chetidagi qurilmada ilovani sinab ko'rishi mumkin.

Android-da Debug: Android Studio va ADB orqali sozlash

Android Debug Bridge (ADB) — buyruq satridan Android qurilmasi bilan o'zaro aloqa qilish uchun universal vosita. ADB orqali ilovani o'rnatish, sozlashni ishga tushirish, fayllarni nusxalash, shell buyruqlarini bajarish va jurnallarni ko'rish mumkin. Android Studio barcha sozlash operatsiyalari uchun ADB dan foydalanadi.

Android Studio'da debugger ulash

Android Studio ikkita sozlash rejimini qo'llab-quvvatlaydi: Run (oddiy ishga tushirish) va Debug (debugger ulangan holda ishga tushirish). Debug rejimida to'g'ridan-to'g'ri muharrirda breakpoint'lar qo'yishingiz, Debug Tool Window-da o'zgaruvchilarni ko'rishingiz va Evaluate Expression-da ifodalarni baholashingiz mumkin. Fon jarayonlarini (Service, BroadcastReceiver) sozlash uchun Attach Debugger to Android Process dan foydalaning.

kotlin
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Breakpoint bu yerda bajarishni to'xtatadi
        val button = findViewById<Button>(R.id.btn_debug)
        button.setOnClickListener {
            startDebugProcess()
        }
    }

    private fun startDebugProcess() {
        val data = fetchDataFromApi()
        Log.d("Debug", "Data loaded: $data")
    }
}

ADB shell va ma'lumotlar bazasi inspeksiyasi

ADB shell buyruqlari root huquqlarisiz qurilmaning fayl tizimiga kirish imkonini beradi. Databases papkasining mazmunini ko'rish, .db faylini kompyuterga nusxalash va istalgan SQLite klienti bilan ochish mumkin. Android Studio Database Inspector bu jarayonni avtomatlashtiradi: ma'lumotlar bazasining jonli ma'lumotlarini real vaqtda ko'rasiz va to'g'ridan-to'g'ri IDE dan SQL so'rovlarini bajarishingiz mumkin.

iOS-da Debug: Xcode, debugger va diagnostika

Xcode LLDB asosida integratsiyalashgan sozlash muhitini taqdim etadi. Dasturchi ilovani simulyatorda yoki jismoniy qurilmada ishga tushirishi, breakpoint'lar qo'yishi va bajarish oqimlarini boshqarish uchun Debug Navigator-dan foydalanishi mumkin. Android'dan farqli o'laroq, iOS maxsus konfiguratsiyasiz bitta qurilmada bir vaqtning o'zida ikkita Debug yig'ishini ishga tushirishga ruxsat bermaydi.

Simulyatorda va qurilmada sozlash

Simulyator ilovani mahalliy macOS jarayoni sifatida ishga tushiradi, bu eng tez sozlash siklini ta'minlaydi. Jismoniy qurilmada sozlash USB yoki Wi-Fi (iOS 16 dan boshlab) orqali amalga oshadi va LLDB qurilmadagi debugserver bilan bog'lanadi. Qurilmada sozlash unumdorligi USB 2.0 cheklangan o'tkazish qobiliyati tufayli pastroq, ammo faqat jismoniy qurilma real stsenariylarni sinab ko'rishga imkon beradi: push bildirishnomalari, kamera, sensorlar.

swift
import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        setupUI()
    }

    private func setupUI() {
        let label = UILabel()
        label.text = "Debug Mode"
        label.textColor = .systemBlue
        view.addSubview(label)
    }
}

Diagnostika va ishdan chiqish hisobotlari

Xcode Organizer sinovchilarning qurilmalaridan Crash Logs orqali ishdan chiqish jurnallarini to'playdi. Symbolication (manzillarni funksiya nomlariga aylantirish) uchun har bir Debug yig'ishida yaratiladigan .dSYM fayli talab qilinadi. Release yig'ishida ham dSYM yaratiladi, ammo App Store'dan olingan ishdan chiqish jurnallarini Organizer'ga qo'lda yoki bitcode xizmati orqali yuklash kerak.

Tez-tez beriladigan savollar

Debug yig'ishini foydalanuvchi qurilmasida ishga tushirish mumkinmi?

Texnik jihatdan ha — Debug sertifikati bilan Ad Hoc orqali, ammo Apple va Google buni tavsiya etmaydi. Debug yig'ishi sozlash simvollarini va past unumdorlikni o'z ichiga oladi, bu UX-ni yomonlashtiradi va ilova hajmini 2–3 baravar oshiradi.

Nima uchun Debug yig'ishi Release-dan sekin ishlaydi?

Sabab — kompilyator optimallashtirishining o'chirilganligi (-O0). Kompilyator funksiyalarni ichki joylashtirmaydi, o'lik kodni olib tashlamaydi va barcha oraliq o'zgaruvchilarni saqlaydi. Qo'shimcha ravishda, Debug Release-da mavjud bo'lmagan tasdiq va massiv chegaralarini tekshirishni faollashtiradi.

iOS uchun Wi-Fi sozlashni qanday sozlash mumkin?

Xcode-da Window → Devices and Simulators-ni tanlang, qurilmangiz uchun „Connect via network” ni belgilang. Qurilma va Mac bir xil Wi-Fi tarmog'ida bo'lishi kerak. Bir marta USB orqali ulangandan so'ng, keyingi ishga tushirishlarda sozlash Wi-Fi orqali ishlaydi.

Android Studio'da „attach to process” nima?

Attach to process ilovani qayta ishga tushirmasdan allaqachon ishlayotgan jarayonga debugger ulash imkonini beradi. Bu standart Debug Run qo'llanilmaydigan Service, BroadcastReceiver yoki tizim hodisasi bilan ishga tushirilgan jarayonlarni sozlash uchun foydalidir.

Release yig'ishida NSLog va print-ni qanday ko'rish mumkin?

NSLog va print sukut bo'yicha faqat Debug konfiguratsiyasida jurnalni ko'rsatadi. Release uchun OSLogType.default bayrog'i bilan os_log dan foydalaning — u xabarlarni Unified Logging System da saqlaydi va Mac-da Console.app orqali mavjud.

Xulosa

  • Debug yig'ishi sozlash simvollarini o'z ichiga oladi, optimallashtirishni o'chiradi va development imzo sertifikatidan foydalanadi
  • LLDB — ikkala platforma uchun asosiy debugger, breakpoint, watchpoint va REPL-ni qo'llab-quvvatlaydi
  • Debug va Release farqlari optimallashtirish, simvollar, imzo, obfuskatsiya va yig'ish hajmiga taalluqli
  • Android uchun ADB va iOS uchun debugserver IDE ning qurilma bilan aloqasini ta'minlaydi
  • Debug yig'ishining unumdorligi o'chirilgan optimallashtirishlar tufayli 2–5 marta past
  • Ishdan chiqish jurnallari Debug yig'ishida o'qiladigan funksiya nomlarini o'z ichiga oladi, Release esa dSYM orqali symbolication talab qiladi

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