Bosh sahifa Wiki Unwind Table

Unwind Table

Unwind Table — call stack bo‘ylab oldingi frame holatini tiklash va exception yoki diagnostika paytida stackni orqaga yurish uchun kerakli qoidalarni saqlaydigan metadata. U frame pointer bo‘lmagan optimized kodda ayniqsa muhim.

Frame qoidalari

Har code range uchun Canonical Frame Address qanday hisoblanishi, return address va callee-saved registerlar qayerda saqlanishi yoziladi. Unwinder current PC asosida qoidani topib, caller register holatini bosqichma-bosqich tiklaydi.

Exception unwinding

Exception unwinding ikki bosqichli bo‘lishi mumkin: avval handler qidiriladi, keyin stack frame’lar yechilib cleanup yoki destructorlar ishlatiladi. Language-specific data area qaysi range qaysi landing pad va type filterga tegishli ekanini ko‘rsatadi.

Asinxron yurish

Asynchronous stack sampling istalgan instructionda to‘xtashi mumkin. Prologue va epilogue o‘rtasida stack hali odatiy holatda bo‘lmagani uchun unwind qoidalari instruction range bo‘yicha aniq yangilanadi. Signal-safe unwinder allocation va lockdan qochishi kerak.

Formatlar

Frame pointer stack walking soddaroq, ammo register va instruction xarajatiga ega. Unwind table ixcham bo‘lishi mumkin, lekin metadata buzilsa stack trace noto‘g‘ri yoki xavfli bo‘ladi. Platform formatlari DWARF CFI, Windows unwind info yoki compact unwind bo‘lishi mumkin.

JIT integratsiyasi

JIT generated code runtime registry orqali unwind ma’lumotini ro‘yxatdan o‘tkazadi va code o‘chirilganda chiqaradi. Native/managed boundary ikki runtime unwinderining kelishuvini talab qiladi.

Tekshiruv

Tekshiruv har instruction offsetdan synthetic register state bilan unwind qilib caller PC va stack pointerni etalon bilan solishtiradi. Exception testlari nested cleanup, rethrow va foreign frame’larni qamraydi.

Unwind metadata code size regressiyasida alohida o‘lchanadi, chunki exception ishlatilmasa ham table binaryda joy egallashi mumkin. Uni o‘chirishdan oldin profiler, crash reporter va signal handler talablari baholanadi.

+## Amaliy boshqaruv

Unwind Table bilan ishlaydigan vosita kirishni faqat sintaktik jihatdan qabul qilmaydi. U prologue range, landing pad va personality function bo‘yicha boundary, ownership va version shartlarini tekshiradi. Xato topilganda umumiy muvaffaqiyatsizlik o‘rniga qaysi komponent, qaysi qiymat va qaysi qoida mos kelmagani ko‘rsatiladi. Bunday diagnostika build logini qisqartiradi va muammoni source, toolchain yoki deployment qatlamiga to‘g‘ri ajratadi.

Muhim xato sinfi — asinxron nuqtada noto‘g‘ri caller state tiklash. Bunday holatda vosita optimistik taxmin bilan davom etmaydi: zarur bo‘lsa sekinroq, lekin xavfsiz yo‘l tanlanadi yoki aniq diagnostika bilan jarayon to‘xtatiladi. Xatoni qayta ishlab bo‘ladigan qilish uchun target, optionlar, kirish identifikatori va tegishli metadata qayd etiladi. Foydalanuvchi ma’lumoti xom shaklda loglanmaydi; hash, build-id yoki cheklangan kontekst yetarli bo‘lgan joyda shular ishlatiladi.

Sifat nazorati har PC offsetdan synthetic unwind sinovi orqali bajariladi. Testlar normal misol bilan cheklanmay, bo‘sh kirish, minimal va maksimal o‘lcham, mos kelmaydigan versiya, yo‘qolgan komponent hamda parallel holatlarni qamraydi. Natijaning to‘g‘riligi performance o‘lchovidan alohida baholanadi. Keyin vaqt, xotira, artefakt hajmi yoki runtime kechikishi kabi mavzuga mos metrikalar baseline bilan solishtiriladi. Regressiya topilsa, minimal takrorlanuvchi holat saqlanib, keyingi release uchun doimiy testga aylantiriladi.

Bog‘liq tushunchalar

stack unwinding, call frame, exception handling, return address, DWARF CFI, stack trace