GoDasturchi
Stack Traces and Debugging

Stack Traces and Debugging

Stack trace'lar va debugging

Xato yuz berganda, "qaysi funksiya qaysi funksiyani chaqirgani" haqidagi ma'lumot — stack trace (chaqiruvlar zanjiri) — debugging uchun juda qimmatli. Go'ning runtime paketi buni dasturiy ravishda o'qish imkonini beradi.

example.go
pc, _, _, ok := runtime.Caller(0)  // 0 — joriy funksiya
if ok {
    fn := runtime.FuncForPC(pc)
    fmt.Println(fn.Name())  // masalan, "main.doWork"
}

runtime.Caller(skip) chaqiruvlar zanjirida skip qadar yuqoriga ko'tarilib, o'sha darajadagi funksiya haqidagi ma'lumotni qaytaradi (skip=0 — joriy funksiya, skip=1 — uni chaqirgan funksiya, va hokazo). runtime.FuncForPC(pc).Name() esa funksiyaning to'liq nomini (paket bilan birga) qaytaradi. skipni oshirib borib, butun chaqiruvlar zanjirini — soddalashtirilgan stack trace'ni — qo'lda yig'ish mumkin.

>_ Exercise

StackTrace(maxDepth int) []string funksiyasini yozing. U 0dan maxDepth-1gacha bo'lgan har bir skip qiymati uchun runtime.Caller(skip) chaqiradi; agar okfalse bo'lsa, tsiklni to'xtating; aks holda runtime.FuncForPC(pc).Name()ni natijalar slice'iga qo'shing. Yig'ilgan funksiya nomlari slice'ini qaytaring.

Stuck? Reveal a hint to help you.

Hints (0/4)

Key Takeaway

Key Takeaway:

runtime.Caller va runtime.FuncForPC yordamida chaqiruvlar zanjirini dasturiy ravishda o'qish mumkin — bu maxsus logging, xatolarni boyitish (masalan, xato qaysi funksiyada yuz berganini yozib qo'yish) va debugging vositalarini yozishning asosi.

NEXT UP

Error Handling Basics

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Stack Traces and Debugging

Stack trace'lar va debugging

Xato yuz berganda, "qaysi funksiya qaysi funksiyani chaqirgani" haqidagi ma'lumot — stack trace (chaqiruvlar zanjiri) — debugging uchun juda qimmatli. Go'ning runtime paketi buni dasturiy ravishda o'qish imkonini beradi.

example.go
pc, _, _, ok := runtime.Caller(0)  // 0 — joriy funksiya
if ok {
    fn := runtime.FuncForPC(pc)
    fmt.Println(fn.Name())  // masalan, "main.doWork"
}

runtime.Caller(skip) chaqiruvlar zanjirida skip qadar yuqoriga ko'tarilib, o'sha darajadagi funksiya haqidagi ma'lumotni qaytaradi (skip=0 — joriy funksiya, skip=1 — uni chaqirgan funksiya, va hokazo). runtime.FuncForPC(pc).Name() esa funksiyaning to'liq nomini (paket bilan birga) qaytaradi. skipni oshirib borib, butun chaqiruvlar zanjirini — soddalashtirilgan stack trace'ni — qo'lda yig'ish mumkin.

>_ Exercise

StackTrace(maxDepth int) []string funksiyasini yozing. U 0dan maxDepth-1gacha bo'lgan har bir skip qiymati uchun runtime.Caller(skip) chaqiradi; agar okfalse bo'lsa, tsiklni to'xtating; aks holda runtime.FuncForPC(pc).Name()ni natijalar slice'iga qo'shing. Yig'ilgan funksiya nomlari slice'ini qaytaring.

Stuck? Reveal a hint to help you.

Hints (0/4)

Key Takeaway

Key Takeaway:

runtime.Caller va runtime.FuncForPC yordamida chaqiruvlar zanjirini dasturiy ravishda o'qish mumkin — bu maxsus logging, xatolarni boyitish (masalan, xato qaysi funksiyada yuz berganini yozib qo'yish) va debugging vositalarini yozishning asosi.

NEXT UP

Error Handling Basics