GoDasturchi
Logging vs. the Debugger

Logging vs. the Debugger

Jurnal yozish yoki debugger

Ikki xil sayohatchini tasavvur qiling. Birinchisi — YO'L KUNDALIGI yuritadi: har bir shahar, har bir kun nima bo'lganini yozib boradi, sayohat tugagach kundalikni o'qib, qayerda nima sodir bo'lganini tiklaydi. Ikkinchisi — VAQTNI TO'XTATISH kuchiga ega: istalgan lahzada dunyoni muzlatib, atrofni sinchiklab ko'zdan kechiradi, so'ngra davom ettiradi. Ikkalasi ham foydali, lekin turli vaziyatlar uchun mos.

Dasturda bu ikki usul — jurnal yozish (logging) va debugger (breakpoint qo'yib, dasturni to'xtatib tekshirish vositasi). Logging with slog kursida siz slog bilan jurnal yozishni o'rgangansiz — bu "yo'l kundaligi" usuli: kodga slog.Info yoki fmt.Println qo'shib, dastur ishlaganda nima bo'lganini yozib borasiz, keyin jurnalni o'qib tahlil qilasiz.

VaziyatMos vosita
Xato faqat production'da, kamdan-kam sodir bo'ladiLogging — dasturni to'xtatib bo'lmaydi, lekin doimiy jurnal qoldirish mumkin
Xato concurrency (bir nechta goroutine) bilan bog'liqLogging — debugger goroutine'larni to'xtatib, vaqt sinxronizatsiyasini o'zgartirib yuborishi mumkin
Xato lokal muhitda, istalgan vaqt qayta hosil qilinadiDebugger — bitta joyda to'xtab, barcha o'zgaruvchilarni bir vaqtning o'zida ko'rish qulay
Aniq bitta funksiya ichida qadam-baqadam nima bo'layotganini bilish kerakDebugger — qatordan qatorga o'tib, har bir qiymatni tekshirish mumkin

Logging'ning afzalligi — u dasturning TABIIY ishlash tezligini deyarli o'zgartirmaydi va istalgan muhitda (hatto production serverida) ishlaydi, shuning uchun "ba'zan, kamdan-kam" sodir bo'ladigan xatolarni ushlashda debugger'dan ko'ra ishonchliroq. Debugger'ning afzalligi — bitta to'xtash nuqtasida barcha o'zgaruvchilarni birdaniga, chuqur ko'rish imkonini beradi, bu esa lokal, tez-tez qayta hosil qilinadigan xatolarda tezroq.

Ikkalasini birga ishlatish ham keng tarqalgan strategiya: avval logging bilan xatoni "qaysi funksiya atrofida" ekanini toraytirib (Binary Search for Bugs darsidagi kabi), so'ngra o'sha aniq joyga debugger bilan "kirib", batafsil tekshirish. Vosita tanlovi — vaziyatga qarab, ikkalasini ham bilib, kerak paytida to'g'risini tanlash muhandislik ko'nikmasi.

Muhim ogohlantirish: debug jurnallarini (fmt.Println("BU YERGACHA YETDIM")) muammo hal bo'lgandan keyin kodda QOLDIRIB ketmang — bular keyinchalik boshqa dasturchini chalg'itadi. Vaqtinchalik logging'ni tuzatishdan keyin o'chiring, yoki uni doimiy, foydali slog yozuviga aylantiring.

Key Takeaway

Key Takeaway:

Logging — kamdan-kam, production'da yoki concurrency bilan bog'liq xatolar uchun ishonchliroq; debugger — lokal, tez qayta hosil qilinadigan xatolarda tezroq va chuqurroq. Ikkalasini vaziyatga qarab tanlang, va vaqtinchalik debug jurnallarini muammo hal bo'lgach o'chiring.

NEXT UP

The Rubber Duck Technique

Logging vs. the Debugger

Jurnal yozish yoki debugger

Ikki xil sayohatchini tasavvur qiling. Birinchisi — YO'L KUNDALIGI yuritadi: har bir shahar, har bir kun nima bo'lganini yozib boradi, sayohat tugagach kundalikni o'qib, qayerda nima sodir bo'lganini tiklaydi. Ikkinchisi — VAQTNI TO'XTATISH kuchiga ega: istalgan lahzada dunyoni muzlatib, atrofni sinchiklab ko'zdan kechiradi, so'ngra davom ettiradi. Ikkalasi ham foydali, lekin turli vaziyatlar uchun mos.

Dasturda bu ikki usul — jurnal yozish (logging) va debugger (breakpoint qo'yib, dasturni to'xtatib tekshirish vositasi). Logging with slog kursida siz slog bilan jurnal yozishni o'rgangansiz — bu "yo'l kundaligi" usuli: kodga slog.Info yoki fmt.Println qo'shib, dastur ishlaganda nima bo'lganini yozib borasiz, keyin jurnalni o'qib tahlil qilasiz.

VaziyatMos vosita
Xato faqat production'da, kamdan-kam sodir bo'ladiLogging — dasturni to'xtatib bo'lmaydi, lekin doimiy jurnal qoldirish mumkin
Xato concurrency (bir nechta goroutine) bilan bog'liqLogging — debugger goroutine'larni to'xtatib, vaqt sinxronizatsiyasini o'zgartirib yuborishi mumkin
Xato lokal muhitda, istalgan vaqt qayta hosil qilinadiDebugger — bitta joyda to'xtab, barcha o'zgaruvchilarni bir vaqtning o'zida ko'rish qulay
Aniq bitta funksiya ichida qadam-baqadam nima bo'layotganini bilish kerakDebugger — qatordan qatorga o'tib, har bir qiymatni tekshirish mumkin

Logging'ning afzalligi — u dasturning TABIIY ishlash tezligini deyarli o'zgartirmaydi va istalgan muhitda (hatto production serverida) ishlaydi, shuning uchun "ba'zan, kamdan-kam" sodir bo'ladigan xatolarni ushlashda debugger'dan ko'ra ishonchliroq. Debugger'ning afzalligi — bitta to'xtash nuqtasida barcha o'zgaruvchilarni birdaniga, chuqur ko'rish imkonini beradi, bu esa lokal, tez-tez qayta hosil qilinadigan xatolarda tezroq.

Ikkalasini birga ishlatish ham keng tarqalgan strategiya: avval logging bilan xatoni "qaysi funksiya atrofida" ekanini toraytirib (Binary Search for Bugs darsidagi kabi), so'ngra o'sha aniq joyga debugger bilan "kirib", batafsil tekshirish. Vosita tanlovi — vaziyatga qarab, ikkalasini ham bilib, kerak paytida to'g'risini tanlash muhandislik ko'nikmasi.

Muhim ogohlantirish: debug jurnallarini (fmt.Println("BU YERGACHA YETDIM")) muammo hal bo'lgandan keyin kodda QOLDIRIB ketmang — bular keyinchalik boshqa dasturchini chalg'itadi. Vaqtinchalik logging'ni tuzatishdan keyin o'chiring, yoki uni doimiy, foydali slog yozuviga aylantiring.

Key Takeaway

Key Takeaway:

Logging — kamdan-kam, production'da yoki concurrency bilan bog'liq xatolar uchun ishonchliroq; debugger — lokal, tez qayta hosil qilinadigan xatolarda tezroq va chuqurroq. Ikkalasini vaziyatga qarab tanlang, va vaqtinchalik debug jurnallarini muammo hal bo'lgach o'chiring.

NEXT UP

The Rubber Duck Technique