Line Table — machine instruction manzillarini original source fayl, satr va ba’zan ustun raqamlariga bog‘laydigan debug ma’lumot jadvali. Debugger breakpoint, step va stack trace’da shu mappingdan foydalanadi.
Jadval tuzilishi
Compiler har code range uchun file index, line, column va statement flag kabi holatlarni yozadi. Jadval ko‘pincha address delta va line delta opkodlari bilan ixcham kodlanadi. Bir source satri bir nechta uzilgan machine rangega mos kelishi mumkin.
Optimizatsiya ta’siri
Optimization instructionlarni ko‘chiradi, birlashtiradi yoki o‘chiradi. Inlined function uchun call site va original source location zanjiri saqlanadi. “Step” source tartibida emas, haqiqiy control flow bo‘yicha sakrashi mumkin; bu optimized debuggingning tabiiy cheklovidir.
Metadata chegarasi
Line table variable qiymatini tasvirlamaydi; buning uchun location list va type debug info kerak. Minimal debug yoki symbolized crash build faqat line mappingni saqlashi mumkin, chunki hajmi full debug ma’lumotdan kichik.
Generated kod
Generated code, macro va source-to-source mapping bir nechta logical file qatlamini talab qilishi mumkin. Debug format file checksum va compilation directory orqali to‘g‘ri source versiyasini topadi. Eski source bilan symbolization chalg‘ituvchi satr beradi.
Symbol server
Split debug info executable’dan ajratiladi va build-id bo‘yicha symbol serverdan topiladi. Production binary strip qilinsa ham line table alohida artefaktda saqlanishi mumkin. Maxfiy source pathlarni nisbiy yoki remapped qilish talab etiladi.
Tekshiruv
Tekshiruv ma’lum instruction addresslarini symbolizerga berib kutilgan fayl-satrni oladi. Breakpoint executable statementga joylanishi, inline stack va zero-length range’lar format validatoridan o‘tishi tekshiriladi.
Line table generator fayl indekslarini deterministik tartibda beradi va mavjud bo‘lmagan pathni checksum bilan almashtirmaydi. Symbol server build-id bo‘yicha aynan mos debug faylni qaytaradi; nom o‘xshashligi yetarli emas.
+## Amaliy boshqaruv
Line Table implementatsiyasida address range, source location va inline mapping alohida ma’lumot modeli sifatida yuritiladi. file index, discriminator va end-sequence kabi parametrlar global taxmin sifatida yashirilmaydi, balki artefakt versiyasi va target bilan bog‘lanadi. Shu sabab incremental build yoki runtime qayta yuklashda eskirgan natija ishlatilmaydi. Har bir qaror uchun manba, qo‘llangan qoida va hosil bo‘lgan natija debug rejimida qayta ko‘rish mumkin bo‘lgan shaklda saqlanadi.
Muhim xato sinfi — eski source yoki noto‘g‘ri module base bilan symbolization. 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 build-idga mos symbolizer va breakpoint testi 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
debug information, source location, symbolizer, breakpoint, DWARF, source map