Debugging — dasturdagi xatoning sababini aniqlash, uni joylashtirish va tuzatish jarayoni. Kuzatilgan nosozlik bilan uning asl sababi bir joyda bo‘lishi shart emas. Masalan, foydalanuvchi interfeysida noto‘g‘ri qiymat ko‘rinishi ma’lumotlar bazasidagi yozuv, tarmoq javobi, cache yoki oldingi hisoblashdagi xatodan kelib chiqishi mumkin.
Xatoni qayta hosil qilish
Debugging kuzatilgan holatni aniq tavsiflashdan boshlanadi: kutilgan natija, haqiqiy natija, kirish ma’lumoti, dastur versiyasi va muhit qayd etiladi. Xato barqaror takrorlansa, har o‘zgarishning ta’sirini tekshirish osonlashadi. Faqat productionda yoki ma’lum vaqt oralig‘ida yuz beradigan xato uchun log, trace, metric va crash dump kerak bo‘lishi mumkin.
Minimal reproducer muammoni hosil qiladigan eng kichik kod va ma’lumot to‘plamidir. Keraksiz komponentlar olib tashlanganda xatoga aloqador qism ajralib chiqadi. Bu usul kutubxona, framework yoki tashqi servis bilan bog‘liq muammoni ham aniqroq ko‘rsatadi.
Debugger vositalari
Breakpoint dastur bajarilishini belgilangan qatorda to‘xtatadi. Step over joriy qatorni bajarib keyingisiga o‘tadi, step into chaqirilgan funksiyaga kiradi, step out esa joriy funksiyadan chiqishgacha davom etadi. Call stack funksiyalar qanday ketma-ketlikda chaqirilganini ko‘rsatadi. Local va watch oynalari o‘zgaruvchilar qiymatini kuzatadi.
Conditional breakpoint faqat berilgan shart bajarilganda to‘xtaydi. Watchpoint xotiradagi qiymat o‘zgarganda ishga tushadi. Ko‘p oqimli dasturda threadlar holati, locklar va kutish nuqtalari tekshiriladi. Optimallashtirilgan binaryda kod qatorlari bilan mashina buyruqlari to‘liq mos kelmasligi sababli debugging qiyinlashishi mumkin.
Log va tracing
Log hodisa va kontekstni vaqt bilan qayd etadi. Log darajalari odatda debug, info, warning va error kabi guruhlarga bo‘linadi. Maxfiy ma’lumot, parol, token va shaxsiy ma’lumot logga nazoratsiz yozilmaydi. Strukturali log maydonlari servis, request ID va foydalanuvchi amali bo‘yicha qidirishni osonlashtiradi.
Distributed tracing bitta so‘rovning bir nechta servis bo‘ylab yo‘lini spanlar orqali ko‘rsatadi. Correlation ID loglarni shu so‘rovga birlashtiradi. Metric xatoning qachon va qanchalik tez-tez ko‘payganini ko‘rsatishi mumkin, lekin aniq sababni topish uchun log yoki trace kerak bo‘ladi.
Sababni tekshirish
Gipoteza bitta o‘zgarish bilan tekshiriladi. Binary searchga o‘xshash ajratish usuli kod yoki ma’lumotning qaysi yarmida muammo borligini aniqlaydi. git bisect xatoni kiritgan commitni topish uchun tarixni ikkiga bo‘lib tekshiradi. Tuzatishdan keyin avvalgi reproducer ishlatiladi va regression test qo‘shiladi. Faqat simptomni yashirish xatoning boshqa holatda qaytishiga sabab bo‘lishi mumkin.
Production debugging
Production tizimida debugger bilan jarayonni to‘xtatish foydalanuvchi trafikiga zarar yetkazishi mumkin. Bunday muhitda xavfsiz diagnostika uchun sampling profiler, read-only query, metric va cheklangan log darajasi ishlatiladi. Dynamic log level vaqtincha oshirilsa, disk, maxfiylik va performance ta’siri nazorat qilinadi.
Core dump jarayon to‘xtagan paytdagi xotira va register holatini saqlaydi. U maxfiy ma’lumotni ham o‘z ichiga olishi mumkin, shu sababli kirish huquqi va saqlash muddati cheklanadi. Binary bilan mos debug symbol mavjud bo‘lsa stack trace aniq funksiya va qatorlarga yechiladi.
Bog‘liq tushunchalar
Breakpoint, stack trace, log, distributed tracing, crash dump, regression test, profiler