Reading a Stack Trace
Stack trace'ni o'qish
Domino toshlarining zanjiri qulaganini tasavvur qiling: OXIRGI toshning yiqilganini ko'rasiz, lekin nega yiqilgani — chunki undan OLDINGI toshi urib yubordi, u esa o'zidan OLDINGI toshi tomonidan, va hokazo — birinchi, ATAYLAB itarilgan toshgacha. Zanjirni oxiridan boshigacha kuzatib borish — aynan qaysi tosh "aybdor" ekanini topadi. Stack trace ham xuddi shunday zanjir: dastur qulagan (panic qilgan) joydan boshlab, uni chaqirgan funksiyalar zanjirini orqaga qarab ko'rsatadi.
Go dasturi panic qilganda (yoki test muvaffaqiyatsiz bo'lganda), terminalga stack trace chiqadi — bu qulagan joydan boshlab, uni chaqirgan funksiyalar ro'yxati, ENG YUQORIDA eng oxirgi (aybdor) chaqiruv, ENG PASTDA esa main funksiyasigacha bo'lgan butun zanjir.
panic: runtime error: index out of range [5] with length 3
goroutine 1 [running]:
main.getThirdItem(...)
/app/inventory.go:12
main.processOrder(0xc0000a4000)
/app/order.go:27
main.main()
/app/main.go:9Bu stack trace'ni PASTDAN emas, YUQORIDAN o'qing: eng yuqoridagi qator — panic sodir bo'lgan ANIQ joy: inventory.go faylining 12-qatoridagi getThirdItem funksiyasi, uzunligi 3 bo'lgan ro'yxatdan 5-elementni olishga urinib ko'rgan (Composite Types kursida ko'rgan "slice chegarasidan chiqib ketish" xatosi). Keyingi qator — buni CHAQIRGAN joy: order.goning 27-qatori, processOrder funksiyasi. Eng pastda — bu zanjirni boshlagan main funksiyasi.
- •Birinchi navbatda ENG YUQORIDAGI qatorga qarang — bu xato SODIR bo'lgan aniq joy (fayl nomi va qator raqami bilan)
- •Xato xabarining o'zini o'qing ("index out of range [5] with length 3") — u ko'pincha SABABNI to'g'ridan-to'g'ri aytadi
- •Agar aybdor qator sizning kodingizda emas, balki tashqi kutubxonada bo'lsa — pastga tushib, SIZNING kodingiz qaysi qiymat bilan uni chaqirganini toping, chunki muammo ko'pincha shu yerda
Stack trace — Reading a Stack Trace darsining o'zi bergan gipoteza uchun boshlang'ich nuqta: "nega 5-element so'ralgan, agar ro'yxatda faqat 3 ta bo'lsa?" degan savol bilan processOrderning 27-qatoriga borib, u yerga qanday qiymat uzatilganini tekshirasiz — bu Guessing vs Forming a Hypothesis darsida ko'rgan jarayonning davomi.
Key Takeaway
Key Takeaway:
Stack trace'ni yuqoridan pastga o'qing: eng yuqoridagi qator xato sodir bo'lgan aniq joy, pastga tushgan sari uni chaqirgan funksiyalar zanjiri ko'rinadi. Xato xabarining o'zi ko'pincha sababni to'g'ridan-to'g'ri aytib turadi.
NEXT UP
Isolating Variables: Change One Thing at a Time