GNU C/C++ Mudflap: manba kodiga kompilyatsiya vaqti
GNU C/C++ kompilyatorining (GCC) 4.x versiyasida mavjud bo'lgan Mudflap vositasi manba kodiga kompilyatsiya vaqtini kiritishdan foydalanadi. Shu bilan birga, bajarilish jarayonida xatolar yuzaga kelishi mumkin bo'lgan tuzilmalar tekshiriladi. Mudflap dasturining asosiy e'tibori ko'rsatgich operatsiyalariga qaratilgan, chunki ular C va C++ tillarida yozilgan dasturlarning ish vaqtidagi ko'plab xatolarining manbai hisoblanadi.
Mudflap asbobini o'z ichiga olgan holda, GCC kompilyatori kiritishda yana bir ruxsatga ega tasdiq kodi ko'rsatkich operatsiyalari uchun. Qo'yilgan kod odatda o'tkazilgan ko'rsatkichlarning qiymatlarini tekshirishni amalga oshiradi. Noto'g'ri ko'rsatkich qiymatlari GCC xabarlarni chiqarishiga olib keladi standart qurilma konsol xatolarini chiqarish (stderr). Mudflap-ning ko'rsatgichni tekshirgichi shunchaki ko'rsatkichlarni null uchun tekshirmaydi: uning ma'lumotlar bazasi haqiqiy ob'ektlar va ob'ekt xususiyatlari uchun xotira manzillarini saqlaydi, masalan, manba kodidagi joylashuv, sana/vaqt tamg'asi, xotira ajratilganda va ajratilganda stekning orqaga qaytishi. Bunday ma'lumotlar bazasi dasturning dastlabki kodida xotiraga kirish operatsiyalarini tahlil qilishda kerakli ma'lumotlarni tezda olish imkonini beradi.
Strcpy() kabi kutubxona funktsiyalari o'tgan parametrlarni tekshirmaydi. Bunday funktsiyalar Mudflap tomonidan ham sinovdan o'tkazilmaydi. Biroq, Mudflap-da statik bog'langan kutubxonalar uchun belgilar o'ramini yoki dinamik kutubxonalar uchun qo'shimchani yaratish mumkin. Ushbu texnologiya yordamida dastur va kutubxona o'rtasida qo'shimcha qatlam yaratiladi, bu parametrlarni tasdiqlash va og'ishlarning namoyon bo'lishi haqida xabar berish imkonini beradi. Mudflap qaytarilgan ko'rsatgich qiymatlarining haqiqiyligini aniqlash uchun ilova tomonidan foydalaniladigan xotira chegaralari (uyma, stek, kod va ma'lumotlar segmentlari va boshqalar) haqidagi bilimga asoslangan evristik algoritmdan foydalanadi.
GCC kompilyatorining buyruq qatori opsiyalaridan foydalanib, ishlab chiquvchi kod qismlarini kiritish va xatti-harakatlarni boshqarish uchun Mudflap funksiyalarini yoqishi mumkin, masalan, buzilishlarni (chegaralarni, qiymatlarni) boshqarish, qo'shimcha tekshirish va sozlashlarni amalga oshirish, evristik va o'z-o'zini diagnostikani yoqish. Masalan, -fmudflap kaliti standart Mudflap konfiguratsiyasini o'rnatadi. Mudflap tomonidan topilgan qoidabuzarliklar haqidagi kompilyator xabarlari chiqish konsoliga (stderr) yoki buyruq qatoriga chiqariladi. Batafsil chiqish qoidabuzarlik va tegishli o'zgaruvchilar va funktsiyalar, shuningdek kodning joylashuvi haqida ma'lumot beradi. Ushbu ma'lumot avtomatik ravishda IDE ga import qilinishi mumkin, u erda u ko'rsatiladi va stek kuzatiladi. Ushbu ma'lumotlardan foydalanib, ishlab chiquvchi dasturning manba kodidagi tegishli joyga tezda o'tishi mumkin.
Shaklda. 3-rasmda IDE-da xato qanday ko'rsatilishi va mos keladigan orqaga qaytish ma'lumotlari ko'rsatilgan. Backtrace manba kodiga havola sifatida ishlaydi, bu esa ishlab chiquvchiga muammoning sababini tezda tashxislash imkonini beradi.
Mudflap-dan foydalanish ulanish vaqtini oshirishi va ish vaqtida ish faoliyatini kamaytirishi mumkin. “Mudflap: Pointer Use Checking for C/C++” maqolasida keltirilgan ma’lumotlar shuni ko‘rsatadiki, Mudflap yoqilgan bo‘lsa, ulanish vaqti 3…5 barobarga oshadi va dastur 1,25-5 baravar sekin ishlay boshlaydi. vaqt talab qiluvchi ilovalar bu xususiyatdan ehtiyotkorlik bilan foydalanishi kerak.Biroq, Mudflap xatoga moyil va potentsial halokatli kod konstruksiyalarini aniqlash uchun kuchli vositadir.QNX Mudflap vositasidan dinamik tahlil vositalarining kelgusi versiyalarida foydalanishni rejalashtirmoqda.
Guruch. 3- Xatoga sabab bo'lgan manba kodini topish uchun QNX Momentics IDE da ko'rsatilgan orqaga qaytish ma'lumotlaridan foydalanish.
Do'stlaringiz bilan baham: |