Python-da Samarali Debug: Print O'rniga Breakpoint va PDB Ishlatish
Muallif: Javohir Abdullayev · · Python

Nega print() Bilan Debug Qilish Samaradorlikni Pasaytiradi?
Python dasturchilari orasida eng keng tarqalgan odatlardan biri xatolarni qidirishda print() funksiyasidan foydalanishdir. Kod ishlamay qolganda yoki kutilmagan natija berganda, ko'pchilik har bir o'zgaruvchi ostiga print qo'yib chiqadi. Bu usul dastlab oson va tezkor tuyulsa-da, loyiha kattalashgani sari katta vaqt yo'qotilishiga olib keladi.
Birinchidan, har safar yangi ma'lumotni ko'rish uchun loyihani qayta ishga tushirish talab qilinadi. Agar siz Django, FastAPI yoki og'ir ma'lumotlar bilan ishlayotgan bo'lsangiz, serverning qayta yuklanishi har safar 5-15 soniya vaqtingizni oladi. Ikkinchidan, kod ichida unutilgan print funksiyalari production serverga tushib, log fayllarni keraksiz axlat bilan to'ldiradi. Eng asosiysi, print faqat statik holatni ko'rsatadi, ammo dasturning ichki dinamikasini, xotiradagi ob'ektlar holatini jonli boshqarish imkonini bermaydi.
Python 3.7+ Standarti: breakpoint() Bilan Tanishing
Python 3.7 versiyasidan boshlab tilga o'rnatilgan breakpoint() funksiyasi kiritildi. Bu buyruq dastur ishlashini aynan ko'rsatilgan nuqtada to'xtatadi va sizni interaktiv PDB (Python Debugger) konsoliga olib kiradi. Buning uchun hech qanday kutubxona o'rnatish shart emas.
Oddiy misolni ko'rib chiqamiz. Faraz qilaylik, foydalanuvchi ma'lumotlarini hisoblaydigan funksiyada xatolik yuz bermoqda:
def hisobla_bonus(ish_staji, oylik):
koeffitsiyent = 1.2 if ish_staji > 3 else 1.0
breakpoint() # Dastur shu yerda to'xtaydi
yakuniy_summa = oylik * koeffitsiyent
return yakuniy_summa
hisobla_bonus(4, 5000000)Ushbu kod ishga tushirilganda, terminalda maxsus konsol paydo bo'ladi. Siz dastur ichidagi barcha o'zgaruvchilarning o'sha lahzadagi qiymatini ko'rishingiz, hatto ularni o'zgartirib ko'rishingiz mumkin.
PDB Muhitida Eng Muhim 7 Ta Buyruq
Interaktiv debugger ichiga kirganingizdan so'ng, samarali ishlash uchun quyidagi qisqa buyruqlarni bilish kifoya:
- n (next): Kodning keyingi qatorini bajaradi. Agar qatorda boshqa funksiya chaqirilgan bo'lsa, uning ichiga kirmasdan o'tkazib yuboradi.
- s (step): Funksiya ichiga qadam qo'yadi. Agar qatordagi funksiyaning ichida nima sodir bo'layotganini ko'rmoqchi bo'lsangiz, aynan shu buyruq ishlatiladi.
- c (continue): Dastur to'xtatilgan joyidan davom etadi va keyingi breakpoint yoki dastur yakunigacha ishlaydi.
- p (print) va pp (pretty print): O'zgaruvchi qiymatini chop etish. Masalan:
p koeffitsiyentyoki murakkab JSON uchunpp foydalanuvchi_dict. - l (list): Hozirda to'xtab turgan qator atrofidagi 11 ta kod qatorini kontekst sifatida ko'rsatadi.
- w (where): Qaysi chaqiruvlar zanjiri (call stack) orqali ushbu nuqtaga kelib qolganingizni ko'rsatadi.
- q (quit): Debug jarayonidan chiqish va dasturni to'xtatish.
IPDB Bilan Ish Tajribasini Yangi Bosqichga Olib Chiqing
Standart PDB juda foydali, lekin uning bitta kamchiligi bor: ranglar va sintaksis yorqinligi (syntax highlighting) mavjud emas. Shu sababli professional ishlab chiquvchilar ipdb kutubxonasidan foydalanadilar. U IPython imkoniyatlarini debug jarayoniga olib kiradi: avtomatik to'ldirish (Tab tugmasi), chiroyli ranglar va qulay navigatsiya.
O'rnatish juda oson:
pip install ipdbKodingizga hech qanday o'zgartirish kiritmasdan, standart breakpoint() aynan ipdb orqali ochilishi uchun terminalda bitta muhit o'zgaruvchisini (environment variable) o'rnatish kifoya:
export PYTHONBREAKPOINT=ipdb.set_traceEndi kodingizdagi har qanday breakpoint() chaqiruvi to'liq rangli, qulay IPython interfeysini ochib beradi. Bu esa xatolarni qidirish jarayonini kamida ikki barobar tezlashtiradi.
Ish Samaradorligini Oshiruvchi Amaliy Maslahatlar
- Shartli to'xtash nuqtalari (Conditional Breakpoints): Agar sikl (loop) 10 000 marta aylanayotgan bo'lsa, xatolik faqat i=5000 bo'lganda yuz berayotgan bo'lsa, PDB buyrug'iga shart berishingiz mumkin:
b 42, i == 5000. Bu orqali 5000 marta n tugmasini bosishdan qutulasiz. - Jonli o'zgaruvchilarni sinash: Debug holatida turganingizda, yangi mantiqni to'g'ridan-to'g'ri terminalda sinab ko'ring. Funksiyani o'zgartirmasdan turib, boshqa parametrlar bilan qanday ishlashini tekshirib oling.
- Git commit oldidan tozalash: Loyihangizga tasodifan breakpoint() qolib ketmasligi uchun pre-commit hook yoki qidiruv orqali tekshirish odatini shakllantiring.
Xulosa
Debug qilish mahorati — tajribali va boshlang'ich dasturchini ajratib turuvchi asosiy belgilardan biridir. Kodni o'nlab print() bilan to'ldirish o'rniga, Python standart vositasi bo'lgan breakpoint() va ipdb imkoniyatlaridan foydalaning. Bu nafaqat soatlaringizni tejaydi, balki kodingiz qanday ishlayotganini chuqurroq tushunishingizga yordam beradi.
Teglar: #Python #Debugging #PDB #Samaradorlik #Dasturlash