Windows dasturiy ta'minotini kuzatib boruvchi protsessor - Windows software trace preprocessor

The Windows dasturiy ta'minot izi protsessori (WPP; oldingi protsessor va tegishli qo'llab-quvvatlash vositalari sifatida tanilgan WPP dasturini kuzatish) a oldingi protsessor dan foydalanishni soddalashtiradigan WMI samarali amalga oshirish uchun tadbirlarni kuzatish dasturiy ta'minotni kuzatish yilda haydovchilar va ilovalar bu maqsad Windows 2000 va keyinchalik operatsion tizimlar. WPP tomonidan yaratilgan Microsoft va tarkibiga kiritilgan Windows DDK. Garchi WPP o'zining qo'llanilishi jihatidan keng bo'lsa ham, u tarkibiga kiritilmagan Windows SDK, va shuning uchun birinchi navbatda Windows DDK-ni sotib olgan dasturiy ta'minot ishlab chiqaruvchilari tomonidan ishlab chiqarilgan haydovchilar va haydovchilarni qo'llab-quvvatlovchi dasturlar uchun foydalaniladi.

Fon

Dasturiy ta'minotni kuzatish - bu ixtisoslashtirilgan foydalanish kirish dasturning bajarilishi to'g'risidagi ma'lumotlarni yozib olish. Ushbu ma'lumot odatda uchun ishlatiladi disk raskadrovka. Aksincha voqealarni qayd qilish, asosiy maqsadi bo'lishi mumkin bo'lgan voqealar yozuvlarini yaratishdir tekshirilgan tomonidan tizim ma'murlari (masalan, qarang Voqeani tomosha qiluvchi ) yoki boshqaruv vositalari tomonidan tahlil qilinadigan bo'lsa, dasturiy ta'minotni kuzatish, birinchi navbatda, disk raskadrovka yordamidir dasturiy ta'minot ishlab chiquvchilari. Shunday qilib, ularning ko'plari funktsional bo'lmagan talablar kabi voqealarni ro'yxatdan o'tkazish mahalliylashtirish yoki a standartlarga asoslangan chiqish formati, dasturiy ta'minotni kuzatishning ko'pgina dasturlari uchun aniq maqsadga muvofiq emas. Boshqa tomondan, dasturiy ta'minotni kuzatish uchun maxsus talablar mavjud ishlash odatda voqealarni ro'yxatdan o'tkazishda unchalik muhim emas. Masalan, dasturiy ta'minotni kuzatishda keng tarqalgan foydalanish, kuzatuvga kirish / chiqish, kirish nuqtasida va orqaga qaytishda ishlab chiqaradi funktsiyalari yoki usullari shunday qilib, ishlab chiquvchi vizual ravishda ijro etish yo'lini kuzatishi mumkin, shu jumladan ko'pincha parametrlar va qiymatlarni qaytarish, disk raskadrovka yoki matnga asoslangan jurnal faylida (buni a sifatida ko'rish mumkin ish vaqti analogi ketma-ketlik diagrammasi ). Ushbu turdagi kuzatuv, ishlab chiquvchilar uchun foydali bo'lsa-da, uni o'chirib bo'lmaydigan bo'lsa, dasturiy mahsulotning ishlashiga katta zarar etkazishi mumkin (yoki kompilyatsiya vaqti shartli kompilyatsiya orqali yoki ish vaqtida bayroqlar ).

Dasturiy ta'minotni kuzatish uchun maxsus qo'shimcha fikrlar quyidagilarni o'z ichiga oladi:

  • Yilda mulkiy dasturiy ta'minot, kuzatuv ma'lumotlari mahsulot haqidagi maxfiy ma'lumotlarni o'z ichiga olishi mumkin manba kodi.
  • Agar kuzatuv ish vaqtida yoqilgan yoki o'chirib qo'yilgan bo'lsa, kuzatuvning ko'plab usullari ikkilik ma'lumotlarga sezilarli darajada qo'shimcha ma'lumot kiritilishini talab qiladi, bu esa kuzatuv o'chirilgan bo'lsa ham, bilvosita ishlashga zarar etkazishi mumkin.
  • Agar kuzatuv kompilyatsiya vaqtida yoqilgan yoki o'chirilgan bo'lsa, mijozlar mashinasida muammo bo'yicha iz ma'lumotlarini olish mijozning sizning dasturiy ta'minotingizning maxsus, kuzatuv yoqilgan versiyasini o'rnatishga tayyorligi va xohishiga bog'liq.
  • Drayvlar kabi dasturiy ta'minotning ayrim turlari kuzatuvni yoqish bilan ham qat'iy ishlash talablariga javob berishi kerak.

Dastlabki ikkita fikr tufayli dasturiy ta'minotni kuzatishning an'anaviy usullari kompilyatsiya vaqtida kuzatishni (va kuzatuv ma'lumotlarini qo'shishni) yoqish yoki o'chirish uchun shartli kompilyatsiyadan foydalanadi. Masalan, yordamida C oldingi protsessori, so'lni aniqlash mumkin DebugOut quyidagicha:

#ifdef _DEBUG # define DebugOut (msg, ...) DebugPrintf (__ FUNCTION__ "(" __FILE__ ":" TO_STRING (__ LINE__) ")" msg, __VAR_ARGS __) # else # define DebugOut (msg, ...) # endif

qayerda TO_STRING satr raqamini o'zgartiradigan so'l (__LINE__) mag'lubiyatga va DebugPrintf a printf - masalan, tuzatuvchiga matn chiqarishi mumkin bo'lgan funktsiya.

Keyin, quyidagi kod:

DebugOut ("% d xato yuz berdi", error_code);

faqat disk raskadrovka tuzilishida quyidagilarga o'xshash mahsulot ishlab chiqaradi:

SomeFunction (file.c: 78) 217 ​​xatolik yuz berdi

Kuzatuvning ayrim turlari (xususan, kuzatib borish / chiqish) uchun yana bir texnikadan foydalanish kerak asbobsozlik. Ushbu uslub ko'plab muhim muammolarni hal qilishi mumkin bo'lsa-da, u har doim ham mavjud emas (odatda faqat boshqariladigan kod ).

WMI hodisalarini kuzatib borish, masalan, drayverlar kabi ishlashning muhim kodlarida kuzatuv ko'rsatkichlarini aniqlaydigan texnologiyaning namunasidir. Shuningdek, u ishlab chiquvchiga odam tomonidan o'qiladigan kuzatuv ma'lumotlarini aniqlashga ruxsat berish orqali sezgir iz ma'lumotlarini tarqatilishini nazorat qilish masalasini hal qilishi mumkin ("% D xato yuz berdi" yuqoridagi misolda) mahsulotga o'rnatilmasligi uchun koddan alohida (kodda ma'lum bir xabar uning xabar raqami bilan ataladi). Biroq, ba'zi bir muhim cheklovlar mavjud:

  • WMI hodisalarini kuzatish o'z-o'zidan avtomatik ravishda yaratolmaydi "SomeFunction (file.c: 78)" iz xabarining bir qismi. Bu WMI voqealarini kuzatish uchun xos bo'lmagan barcha ushbu texnologiyalarning cheklanishi.
  • Kuzatuv ma'lumotlarining odam tomonidan o'qiladigan qismini koddan ajratishni talab qilish kodning o'qilishini pasaytirishi mumkin.
  • Ushbu texnikadan foydalanib, "bir martalik" kuzatuv xabarlari uchun katta rivojlanish xarajatlari kiritilishi mumkin.

WPP-ning ishlashi

WPP kompilyatsiya qilinishidan oldin ishlaydi (boshqacha aytganda, hatto C protsessordan oldin ham) va xabar sarlavhasini izlash ishlov beradigan har bir fayl uchun (sukut bo'yicha bu sarlavha filename.tmh, qayerda Fayl nomi qayta ishlangan manba faylining nomi). Keyin ushbu sarlavha manba fayliga aniq kiritilishi kerak, masalan:

// Fayl: file.cxx // Ushbu fayl WPP # dan foydalanishga misol bo'lib, "file.tmh" ni o'z ichiga oladi

WPP ning tushunchasi C /C ++ sintaksis juda cheklangan. Xususan, u kengaymaydi makrolar (zarurat bo'lgan maxsus holatlar bundan mustasno) va u ham ishlamaydi pragmalar yoki biron bir semantik tahlilni amalga oshirish.

Ishlab chiquvchi konfiguratsiya fayli, sharhlardagi maxsus izohlar, buyruq satri parametrlari yoki ushbu usullarning bir nechta kombinatsiyasi orqali WPP boshqarishi kerak bo'lgan bir yoki bir nechta kuzatuv makrosini belgilaydi. Har safar WPP o'zi boshqarishi kerak bo'lgan makroslardan biriga duch kelganida, u iz xabarlar makrosini hosil qiladi. Boshqacha qilib aytganda, masalan DoTrace kuzatuv so'lidir, WPP har bir paydo bo'lishi uchun alohida makro hosil qiladi DoTrace. Yaratilgan iz xabarlar makroslari fayl nomi va satr raqami bilan ajratiladi va har xil protsessor fokuslaridan foydalangan holda WPP o'z navbatida asl kuzatuv makrosini belgilaydi, shunda u har bir voqeada tegishli iz xabari makrosini kengaytiradi.

WPP tomonidan qanday qilib kuzatuv xabarlari makroslari yaratilishi shablon fayliga bog'liq (fayl formati hujjatsiz). WPP-ga kiritilgan standart shablon fayllari izlar xabari qatorini izoh (Microsoft Compiler-ning __annotation xususiyatidan foydalangan holda). Ushbu satrlar kompilyatsiya qilingan kodga kiritilmagan, lekin WPP-ga kiritilgan vositalar tushunishi mumkin bo'lgan formatdagi disk raskadrovka belgisiga kiritilgan. Kuzatuv xabarlari makroslari bayroqlar orqali kuzatishni yoqish yoki o'chirish uchun mantiqni va WMI voqealarini kuzatuvchi API-ga qo'ng'iroqlarni o'z ichiga oladi.

Cheklovlar

  • WPP makroslarni kengaytirmagani uchun, boshqa makro ta'rifiga kiritilgan kuzatuv makrosining bir zumligini tan olmaydi. Masalan, agar DoTrace kuzatuv makrosi va makrosidir CheckForErrors quyidagicha aniqlanadi:
#define CheckForErrors (error_code) if (IsError (error_code)) {DoTrace ("% d xato yuz berdi", xato); HandleError (error_code); }

u holda WPP izlash uchun makroslarni yaratmaydi DoTrace qayerda CheckForErrors sodir bo'ladi. WPP ushbu muammo uchun vaqtinchalik echimlarni taqdim etadi, ammo hali ham vaqtinchalik echim yordamida ifodalash mumkin bo'lmagan kichik makroslar sinfi mavjud.

  • Standart shablon fayli faqat Microsoft kompilyatori bilan to'g'ri ishlaydigan kodni yaratadi. Garchi bu protsessorning o'ziga xos cheklovi bo'lmasa-da, shablon fayli (izlar xabari sarlavhasida qanday kod hosil bo'lishini boshqaruvchi) hujjatsiz formatni ishlatishi shuni anglatadiki, amalda WPP faqat Microsoft kompilyatori bilan to'g'ri ishlaydi.
  • WPP-ning oldingi versiyalari bir nechta iz makrosi sarlavhasi manba fayliga kiritilganda kompilyatsiya qilishda xatoliklarni keltirib chiqargan (masalan, agar izlash bilan manba faylida inline funktsiyalarini kuzatadigan sarlavha bo'lsa). Bu eng so'nggi versiyada o'rnatildi. Shuni esda tutingki, bu WPP vositasining o'zi emas, balki shablon faylining cheklanishi.
  • Trace message makroslari fayl va satr raqami bilan ajratilganligi sababli, manba kodida bitta satrda bitta kuzatuv makrosi bo'lishi mumkin.

Tashqi havolalar