Վրիպազերծում

**Վրիպազերծում** (), գործընթաց  ճարտարագիտության մեջ, որի նպատակն է գտնել վրիպակների (բագերի) առաջացման արմատական պատճառը, մշակել դրանց շրջանցման ուղիներ և գտնել հնարավոր շտկումներ։ 

Ծրագրային ապահովման վրիպազերծման մեթոդները.

* Ինտերակտիվ վրիպազերծում. այս մեթոդի միջոցով ծրագրավորողը փուլ առ փուլ հետևում է ծրագրի կատարմանը՝ քայլ առ քայլ գտնելով սխալի ճշգրիտ աղբյուրը։
* Կառավարման հոսքի վերլուծություն. ուսումնասիրվում է ծրագրի հրահանգների կատարման հերթականությունը՝ տրամաբանական սխալները բացահայտելու համար։
* Լոգ ֆայլերի վերլուծություն. վրիպազերծման այս ձևը ենթադրում է ծրագրի աշխատանքի մասին արձանագրված տվյալների (լոգերի) ուսումնասիրություն՝ սխալների և դրանց առաջացման պահի մասին տեղեկություն ստանալու համար։
* Մոնիթորինգ (հսկողություն). սահմանվում է հսկողություն ծրագրի կամ ամբողջ համակարգի աշխատանքի նկատմամբ՝ դրանց վարքագիծը մանրամասն վերլուծելու համար։
* Հիշողության արտագրում. վրիպազերծման այս գործիքը հնարավորություն է տալիս ուսումնասիրել ծրագրի հիշողության վիճակը կոնկրետ պահին՝ բացահայտելով հիշողության հետ կապված խնդիրները։
* Կատարողականության վերլուծություն. այն գնահատում է ծրագրի արդյունավետությունը և կատարողականությունը՝ օգնելով գտնելու արագության հետ կապված խնդիրները կամ սխալները։

Շատ ծրագրավորման լեզուներ և ծրագրային գործիքներ առաջարկում են հատուկ ծրագրեր, որոնք ավտոմատացնում են վրիպազերծման գործընթացը. դրանք հայտնի են որպես վրիպազերծիչներ (դեբագերներ) ()։

## Ստուգաբանություն

«Բագ» () տերմինը, որը նշանակում է թերություն, օգտագործվել է դեռևս 1878 թվականից, երբ Թոմաս Էդիսոնը իր գյուտերում հանդիպող «փոքրիկ թերությունները և դժվարությունները» անվանել է «բագեր»։

1940-ականներից հայտնի մի պատմություն է կապված ադմիրալ Գրեյս Հոփերի հետ։ Նրա գործընկերները, աշխատելով Հարվարդի համալսարանի Mark II համակարգչի վրա, հայտնաբերել են, որ փոխանցատուփի մեջ մնացած ցեցը խոչընդոտում է համակարգչի աշխատանքին։ Նրանք գրքում գրել են. «Միջատի () հայտնաբերման առաջին իրական դեպքը»։ Չնայած պատմությունը, հավանաբար, բառախաղ է եղել՝ համատեղելով «բագ» բառի երկու իմաստները (կենսաբանական և թերություն), այն ցույց է տալիս, որ այդ տերմինն արդեն օգտագործվել է համակարգչային ոլորտում։

Նման ձևով, վրիպազերծում տերմինը համակարգիչների աշխարհ մտնելուց առաջ օգտագործվել է ավիացիայում։ Երկրորդ համաշխարհային պատերազմի մանհեթենյան նախագծի տնօրեն Ռոբերտ Օփենհայմերը տերմինն օգտագործել է 1944 թվականի հոկտեմբերի 27-ին տեխնիկական անձնակազմ հավաքագրելու վերաբերյալ Էռնեստ Լոուրենսին ուղղված իր նամակում։ Օքսֆորդի անգլերեն բառարանի համաձայն՝ «debugging» տերմինն օգտագործվել է օդանավի շարժիչների փորձարկումների վերաբերյալ 1945 թվականի մի հոդվածում, որը հրապարակվել է «Journal of the Royal Aeronautical Society»-ում։ «Airforce» ամսագրի 1945 թվականի հունիս ամսվա համարում խոսվել է օդանավի տեսախցիկների վրիպազերծման մասին։

Գիլլի 1951 թվականի հիմնարար հոդվածը ծրագրավորման սխալների մասին առաջին խորը քննարկումն է, սակայն նա չի օգտագործել «բագ» կամ «վրիպազերծում» տերմինները։ Հաշվողական տեխնիկայի միության () թվային գրադարանում «debugging» տերմինն առաջին անգամ օգտագործվել է 1952 թվականի ACM-ի ազգային ժողովի երեք զեկույցներում։ Այդ երեք զեկույցներից երկուսում տերմինն օգտագործվել է չակերտներում։ 

Մինչև 1963 թվականը «վրիպազերծում» տերմինն այնքան էր տարածվել, որ CTSS-ի ձեռնարկի առաջին էջում այն հիշատակվել է առանց բացատրության։

## Վրիպազերծման ընդլայնումը
Քանի որ ծրագրային ապահովման և էլեկտրոնային համակարգերի բարդությունը շարունակաբար աճել են, վրիպազերծման ավանդական մեթոդները համալրվել են նոր մոտեցումներով՝ հնարավորություն տալով ավելի լավ հայտնաբերելու անոմալիաները, գնահատելու դրանց ազդեցությունը և պլանավորելու ծրագրային թարմացումները։ Մասնագիտական շրջանակներում, «սխալ», «թերություն» կամ «բագ» բառերի փոխարեն, հաճախ օգտագործվում են ավելի չեզոք տերմիններ՝ «անոմալիա» կամ «անհամապատասխանություն»։ Սա օգնում է խուսափել այն ենթադրությունից, թե բոլոր թերությունները պարտադիր պետք է շտկվեն ցանկացած գնով։ Փոխարենը, կատարվում է ազդեցության գնահատում՝ որոշելու համար, թե արդյոք անսարքությունը վերացնելու համար կատարված փոփոխությունները տնտեսապես արդյունավետ կլինեն համակարգի համար, թե գուցե պլանավորված նոր թողարկումը դրանք անիմաստ կդարձնի։ Պարտադիր չէ, որ բոլոր խնդիրները լինեն անվտանգության կամ առաքելության համար կրիտիկական։ Կարևոր է նաև խուսափել այն իրավիճակից, երբ փոփոխությունը կարող է երկարաժամկետ կտրվածքով ավելի շատ խնդիրներ ստեղծել օգտատերերի համար, քան գոյություն ունեցող խնդիրը (երբ «բուժումն ավելի վատ է, քան հիվանդությունը»)։ Անոմալիաների ընդունելիության մասին որոշումները կարող են կանխել «զրոյական թերությունների» պարտադրանքի մշակույթը, որտեղ մարդիկ, ձգտելով զրոյական թերությունների, կարող են թաքցնել առկա խնդիրները։ Հաշվի առնելով կողմնակի խնդիրները, ինչպիսին է ծախս-օգուտ հարաբերության գնահատումը, վրիպազերծման ավելի լայն մեթոդները ընդլայնվում են՝ որոշելու համար անոմալիաների հաճախականությունը (որքան հաճախ են նույն «բագերը» հանդիպում)՝ օգնելով գնահատել դրանց ազդեցությունը ամբողջ համակարգի վրա։

## Գործիքներ

Վրիպազերծման բարդությունը տատանվում է՝ սկսած պարզ սխալների շտկումից մինչև տվյալների հավաքագրման, վերլուծության և թարմացումների պլանավորման երկարատև ու ծանր աշխատանք։ Ծրագրավորողի հմտությունները կարող են կարևոր գործոն լինել խնդիրը վրիպազերծելու կարողության մեջ, սակայն ծրագրային ապահովման վրիպազերծման բարդությունը մեծապես կախված է համակարգի բարդությունից, ինչպես նաև օգտագործվող ծրագրավորման լեզուներից և հասանելի գործիքներից, ինչպիսիք են վրիպազերծիչները ()։ Վրիպազերծիչները ծրագրային գործիքներ են, որոնք ծրագրավորողին թույլ են տալիս վերահսկել ծրագրի կատարումը, դադարեցնել այն, վերագործարկել, սահմանել ընդհատման կետեր () և փոխել հիշողության արժեքները։ Վրիպազերծիչ տերմինը կարող է վերաբերել նաև այն մարդուն, ով զբաղվում է վրիպազերծմամբ։

Բարձր մակարդակի ծրագրավորման լեզուները, ինչպիսին է Java-ն, հիմնականում հեշտացնում են վրիպազերծումը, քանի որ դրանք ունեն այնպիսի գործառույթներ, ինչպիսիք են բացառությունների մշակումը և տիպերի ստուգումը, որոնք հեշտացնում են անկանոն վարքի իրական աղբյուրները գտնելը։ C կամ ասեմբլեր լեզուներում սխալները կարող են առաջացնել աննկատ խնդիրներ, օրինակ՝ հիշողության վնասում, և հաճախ դժվար է պարզել, թե որտեղ է սկզբնական խնդիրը առաջացել։ Նման դեպքերում անհրաժեշտ են լինում հիշողության վրիպազերծման գործիքներ։

Որոշ իրավիճակներում շատ օգտակար կարող են լինել հատուկ լեզվի համար նախատեսված ընդհանուր նշանակության ծրագրային գործիքները, որոնք կոչվում են ստատիկ կոդի վերլուծության գործիքներ։ Այս գործիքները կոդի մեջ փնտրում են հայտնի խնդիրների որոշակի հավաքածու՝ կենտրոնանալով ավելի շատ իմաստաբանության (սեմանտիկա) վրա (օրինակ՝ տվյալների հոսքի), քան շարահյուսության (սինտաքսի) վրա, ինչպես դա անում են կոմպիլյատորներն ու ինտերպրետատորները։

Գոյություն ունեն ինչպես վճարովի, այնպես էլ անվճար գործիքներ տարբեր լեզուների համար. որոշները պնդում են, որ կարող են հայտնաբերել հարյուրավոր տարբեր խնդիրներ։ Այս գործիքները չափազանց օգտակար են շատ մեծ կոդային համակարգերը ստուգելիս, երբ կոդը ձեռքով ստուգելն անիրատեսական է։ Բնորոշ օրինակ է այն խնդիրը, երբ փոփոխականը փորձում են օգտագործել նախքան նրան հայտարարելը։ Որոշ գործիքներ նաև կատարում են տիպերի խիստ ստուգում, նույնիսկ եթե լեզուն դա չի պահանջում։ Այդպիսով, դրանք ավելի լավ են գտնում այն կոդի հավանական սխալները, որոնք շարահյուսորեն ճիշտ են։ Սակայն այս գործիքները հայտնի են իրենց կեղծ դրական պատասխաններով, երբ ճիշտ կոդը նշվում է որպես կասկածելի։ Հին Unix lint ծրագիրը դրա վառ օրինակն է։

Էլեկտրոնային սարքավորումները (օրինակ՝ համակարգչի սարքախումբը), ինչպես նաև ցածր մակարդակի ծրագրային ապահովումը (օրինակ՝ BIOS-ը, սարքի դրայվերները) և միկրոծրագրերը վրիպազերծելու համար հաճախ օգտագործվում են այնպիսի սարքեր, ինչպիսիք են օսցիլոգրաֆները, լոգիկական անալիզատորները կամ շղթայական էմուլյատորները ()՝ առանձին կամ համակցված։ ICE-ը կարող է կատարել ծրագրային վրիպազերծիչի բազմաթիվ բնորոշ խնդիրներ՝ ցածր մակարդակի ծրագրային ապահովման և միկրոծրագրերի վրա։

## Վրիպազերծման գործընթացը
Վրիպազերծման գործընթացը սովորաբար սկսվում է խնդիրը վերարտադրելու քայլերի բացահայտումով։ Սա կարող է բարդ խնդիր լինել, հատկապես զուգահեռ պրոցեսների և որոշ անկայուն սխալների դեպքում։ Օգտագործողի ինտերֆեյսը և օգտագործման պատմությունը նույնպես կարող են դժվարացնել խնդրի վերարտադրումը։

Երբ սխալը կրկնվում է, ծրագրի ներմուծվող տվյալները կարելի է պարզեցնել՝ վրիպազերծումը հեշտացնելու համար։ Օրինակ՝ ենթադրենք՝ կոմպիլյատորում առկա սխալի պատճառով ծրագիրը խափանվում է մեծ ելակետային ֆայլը վերլուծելիս։ Այս դեպքում կարող եք պարզեցնել թեստային օրինակը՝ սկզբնական ֆայլի ընդամենը մի քանի տող թողնելով։ Հաճախ այդ մի քանի տողն իսկ բավարար է նույն խափանումը վերարտադրելու համար։ Պարզեցումը կարելի է անել ձեռքով՝ բաժանիր և տիրիր () մեթոդի միջոցով, որի դեպքում ծրագրավորողը փորձում է հեռացնել սկզբնական թեստային օրինակի որոշ մասեր, այնուհետև ստուգում է՝ արդյոք խնդիրը դեռևս առկա է։ Գրաֆիկական ինտերֆեյսով () ծրագրեր վրիպազերծելիս ծրագրավորողը կարող է փորձել բաց թողնել օգտատիրոջ որոշակի գործողություններ՝ ստուգելու համար՝ արդյոք մնացած գործողությունները բավարար են սխալն առաջացնելու համար։

Երբ թեստային օրինակը բավարար չափով պարզեցված է, ծրագրավորողը կարող է օգտագործել վրիպազերծիչ գործիք՝ ծրագրի վիճակները (փոփոխականների արժեքները, ինչպես նաև կանչերի ստեկը) ուսումնասիրելու և խնդրի աղբյուրը գտնելու համար։ Որպես այլընտրանք կարելի է օգտագործել հետագծումը ()։ Պարզ դեպքերում հետագծումը ընդամենը մի քանի տպող հրամանների հավաքածու է, որոնք ծրագրի կատարման ընթացքում որոշակի կետերում արտածում են փոփոխականների արժեքները։

## Տեխնիկաներ
* Ինտերակտիվ վրիպազերծում․ այս մեթոդը օգտագործում է վրիպազերծիչ գործիքներ, որոնք թույլ են տալիս ծրագրի կատարումը կառավարել քայլ առ քայլ։ Ծրագիրը կարող է դադարեցվել ցանկացած պահի՝ նրա ներքին վիճակը (փոփոխականների արժեքները, կանչերի ստեկը) ստուգելու կամ փոփոխելու համար։ Ծրագրավորողը կարող է ընդհատման կետեր () սահմանել՝ ապահովելով կոդի արագ կատարումը մինչև կասկածելի հատվածը։ Լայնորեն օգտագործվում են նաև հետևման կետեր (), որոնք ծրագրի կատարումը դադարեցնում են, երբ որոշակի փոփոխականի արժեքը փոխվում է, և բռնման կետեր (), որոնք դադարեցնում են աշխատանքը որոշակի իրադարձությունների (օրինակ՝ բացառություններ, գրադարանների բեռնում) դեպքում։
* Տպագրական վրիպազերծում կամ հետագծում ()․ սա հիմնված է կոդում տեղադրված տպագրական հրամանների (օրինակ՝ C լեզվի `printf` ֆունկցիան) կամ մասնագիտացված գործիքների միջոցով ծրագրի կատարման հոսքը և տվյալների փոփոխությունը դիտարկելու վրա։ Այս մեթոդը հայտնի է նաև որպես `printf` վրիպազերծում։ Հետագծման հին տարբերակներից է TRON հրամանը BASIC լեզվում, որը նշանակում էր «Trace On» և ծրագրի աշխատանքի ընթացքում արտածում էր յուրաքանչյուր հրամանի տողի համարը։
* Ակտիվության հետագծում ()․ այս մեթոդը, ի տարբերություն սովորական հետագծման, չի հետևում ծրագրի կատարմանը հրահանգ առ հրահանգ, այլ վերլուծում է պրոցեսորի կողմից որոշակի կոդային հատվածներում ծախսված ընդհանուր ժամանակը։ Եթե ծրագրի կատարման ժամանակի անհամաչափ մեծ մասը ծախսվում է հետագծվող հատվածում, դա կարող է վկայել ծրագրի տրամաբանական սխալի կամ պրոցեսորի ոչ արդյունավետ օգտագործման մասին, որը պահանջում է օպտիմալացում։
* Հեռակա վրիպազերծում ()․ սա այն գործընթացն է, երբ ծրագրի վրիպազերծումն իրականացվում է մի համակարգի վրա, որը տարբերվում է վրիպազերծիչի համակարգից։ Վրիպազերծիչը միանում է հեռակա համակարգին տեղային ցանցի միջոցով և կարող է կառավարել ծրագրի կատարումը և ստանալ տեղեկություններ նրա վիճակի մասին։
* Խափանումից հետո վրիպազերծում ()․ սա ծրագրի վրիպազերծումն է՝ այն խափանվելուց հետո։ Այս տեխնիկաները ներառում են լոգ ֆայլերի ուսումնասիրումը, խափանման պահին կանչերի ստեկի դուրսբերումը և խափանված պրոցեսի հիշողության արտագրման () վերլուծությունը։ Պրոցեսի հիշողության արտագրումը կարող է ստացվել ավտոմատ կերպով՝ համակարգի կողմից, ծրագրավորողի կողմից տեղադրված հրահանգով կամ օգտատիրոջ կողմից՝ ձեռքով։
* «Գայլի ցանկապատ» ալգորիթմ ()․ Էդվարդ Գաուսը այս պարզ և հայտնի ալգորիթմը նկարագրել է 1982 թվականին «Communications of the ACM» ամսագրում․ «Ալյասկայում կա մեկ գայլ. ինչպե՞ս գտնել նրան։ Սկզբում պետք է ցանկապատ կառուցել նահանգի մեջտեղով, սպասել, որ գայլը ոռնա, և որոշել, թե ցանկապատի որ կողմում է նա։ Այնուհետև գործընթացը կրկնել միայն այդ կողմում, մինչև որ կհասնեք այն կետին, որտեղ կկարողանաք տեսնել գայլին»։ Այն հիմնված է «բաժանիր և տիրիր» սկզբունքի վրա։ Դրա օրինակ է Git տարբերակների կառավարման համակարգի `git bisect` հրամանը, որն օգտագործում է այս ալգորիթմը՝ պարզելու համար, թե որ փոփոխությունն է առաջացրել որոշակի սխալ։
* Ձայնագրման և վերարտադրման վրիպազերծում ()․ այս տեխնիկան թույլ է տալիս ստեղծել ծրագրի կատարման ձայնագրություն, որը հետագայում կարելի է կրկնել և ինտերակտիվ վրիպազերծել։ Այն օգտակար է հեռակա, անկայուն և դժվարությամբ կրկնվող սխալների վրիպազերծման համար։
* Ետադարձ վրիպազերծում ()․ սա ծրագրի ելակետային կոդի միջով ժամանակի մեջ հետ քայլելու գործընթաց է՝ հասկանալու համար, թե ինչ է կատարվում ծրագրի կատարման ժամանակ։ Այն թույլ է տալիս օգտատիրոջը փոխել պատմությունը և դիտել, թե ինչպես է ծրագիրը արձագանքում։
* Դելտա վրիպազերծում ()․ այս տեխնիկան ավտոմատացնում է թեստային օրինակների պարզեցման գործընթացը։
* Saff Squeeze․ այս տեխնիկան օգտագործում է թեստի մասերի աստիճանական ներդրում՝ սխալի տեղը մեկուսացնելու համար։
* Պատճառական շղթայի վրիպազերծում ()․ գոյություն ունեն տեխնիկաներ, որոնք թույլ են տալիս հետևել հաշվարկի մեջ պատճառ-հետևանքի շղթաներին։ Այս տեխնիկաները կարող են հարմարեցվել որոշակի սխալների համար, ինչպիսիք են null ցուցիչի օգտագործումը։ 

### Ավտոմատ վրիպազերծում
Ավտոմատ վրիպազերծումը ծրագրային սխալները շտկելու գործընթաց է, որն իրականացվում է ավտոմատ կերպով՝ առանց մարդ-ծրագրավորողի միջամտության։ Այս տեխնոլոգիան հայտնի է նաև որպես ավտոմատ կարկատանների ստեղծում կամ ծրագրի ավտոմատ վերանորոգում։ Ավտոմատ վրիպազերծման հիմնական նպատակն է ինքնուրույն ստեղծել այնպիսի ճիշտ շտկումներ, որոնք կվերացնեն ծրագրային սխալները՝ միաժամանակ խուսափելով ծրագրային հետընթացից։ Այսինքն՝ նոր շտկումները չպետք է վնասեն ծրագրի առկա ֆունկցիոնալությունը։

## Վրիպազերծում ներդրված համակարգերի համար
Ի տարբերություն ընդհանուր նշանակության համակարգչային ծրագրային ապահովման նախագծման միջավայրի, ներդրված միջավայրերի հիմնական բնութագիրը մշակողների համար հասանելի տարբեր հարթակների (CPU ճարտարապետություններ, մատակարարներ, օպերացիոն համակարգեր և դրանց տարբերակներ) մեծ քանակն է: Ներդրված համակարգերը, ըստ սահմանման, ընդհանուր նշանակության նախագծեր չեն. դրանք սովորաբար մշակվում են մեկ խնդրի (կամ խնդիրների փոքր շրջանակի) համար, և հարթակը ընտրվում է հատուկ այդ ծրագիրը օպտիմալացնելու համար: Այս փաստը ոչ միայն դժվարացնում է ներդրված համակարգերի մշակողների կյանքը, այլև դժվարացնում է այդ համակարգերի վրիպազերծումն ու փորձարկումը, քանի որ տարբեր հարթակների համար անհրաժեշտ են տարբեր վրիպազերծման գործիքներ:

Չնայած վերը նշված տարասեռության մարտահրավերին, որոշ վրիպազերծիչներ մշակվել են ինչպես առևտրային, այնպես էլ հետազոտական նախատիպերի համար: Առևտրային լուծումների օրինակներ են Green Hills Software-ը, Lauterbach GmbH-ն և Microchip-ի MPLAB-ICD-ն (շղթայի մեջ վրիպազերծիչի համար): Հետազոտական նախատիպերի գործիքների երկու օրինակ են Aveksha-ն և Flocklab-ը: Դրանք բոլորն էլ օգտագործում են էժան ներկառուցված պրոցեսորների վրա հասանելի ֆունկցիոնալություն՝ On-Chip Debug Module (OCDM), որի ազդանշանները ներկայացվում են ստանդարտ JTAG ինտերֆեյսի միջոցով: Դրանք գնահատվում են՝ հիմնվելով այն բանի վրա, թե որքան փոփոխություն է անհրաժեշտ ծրագրում և որքան հաճախ են դրանք կարողանում համընթաց լինել իրադարձությունների հետ:

Համակարգում սխալները հայտնաբերելու բնորոշ առաջադրանքից բացի, ներդրված համակարգի կարգաբերումը նաև ձգտում է հավաքել համակարգի աշխատանքային վիճակների մասին տեղեկատվություն, որը կարող է օգտագործվել համակարգը վերլուծելու համար՝ գտնելու դրա կատարողականությունը բարձրացնելու կամ այլ կարևոր բնութագրերը (օրինակ՝ էներգիայի սպառումը, հուսալիությունը, իրական ժամանակի արձագանքը և այլն) օպտիմալացնելու եղանակներ։

## Հակավրիպազերծում
Հակավրիպազերծումը () կոդի մեջ որոշակի տեխնիկաների ներդրումն է, որոնք խոչընդոտում են ծրագրային գործընթացի հակադարձ ճարտարագիտությանը կամ վրիպազերծմանը։ Այս մեթոդը լայնորեն օգտագործվում է ճանաչված հրատարակիչների կողմից՝ ծրագրային ապահովումը կրկնօրինակումից պաշտպանելու համար, բայց նաև կիրառվում է վնասակար ծրագրերի () կողմից՝ դրանց հայտնաբերումը և վերացումը բարդացնելու նպատակով։ 

Հակավրիպազերծման տեխնիկաներ

* API-ի վրա հիմնված. ստուգում է վրիպազերծիչի առկայությունը համակարգային տեղեկատվության միջոցով։
* Բացառությունների վրա հիմնված. ստուգում է, թե արդյոք բացառությունների մշակման գործընթացը փոփոխվել է։
* Պրոցեսների և հոսքերի բլոկներ. ստուգում է, թե արդյոք պրոցեսների և հոսքերի բլոկները փոփոխությունների են ենթարկվել։
* Փոփոխված կոդ. ստուգում է, արդյոք կոդում փոփոխություններ են կատարվել ծրագրային ընդհատման կետերի միջոցով։
* Սարքաշարի և ռեգիստրների վրա հիմնված. ստուգում է սարքաշարային ընդհատման կետերը և պրոցեսորի ռեգիստրները։
* Ժամանակի և ուշացումների վերլուծություն. ստուգում է հրահանգների կատարման համար պահանջվող ժամանակը, քանի որ վրիպազերծման ժամանակ այդ գործընթացն ավելի դանդաղ է ընթանում։
* Վրիպազերծիչի հայտնաբերում և պատժում. այս տեխնիկաները թույլ են տալիս ոչ միայն հայտնաբերել վրիպազերծիչի առկայությունը, այլև կիրառել որոշակի պատժիչ գործողություններ։

Microsoft Word-ի վաղ տարբերակներում առկա էր հակավրիպազերծման գործառույթ, որը, վրիպազերծիչ հայտնաբերելու դեպքում, ցուցադրում էր հետևյալ հաղորդագրությունը. «Չարի ծառը դառը պտուղ է տալիս։ Հիմա ոչնչացնում եմ ծրագրի սկավառակը»։ Դրանից հետո ճկուն սկավառակի սարքը սկսում էր տագնապալի ձայներ արձակել՝ օգտատիրոջը երկրորդ անգամ նման փորձ անելուց հետ պահելու համար։

## Տես նաև
* Ծրագրակազմի փորձարկում

## Ծանոթագրություններ

## Գրականություն
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* Peggy Aldrich Kidwell, Stalking the Elusive Computer Bug, IEEE Annals of the History of Computing, 1998.

## Արտաքին հղումներ
* Crash dump analysis patterns in-depth articles on analyzing and finding bugs in crash dumps
* The Essentials of Debugging how to improve your debugging skills
* Plug-in Based Debugging For Embedded Systems
* Embedded Systems test and debug – about digital input generation results of a survey about embedded system test and debug, Byte Paradigm (archived from the original on January 12, 2012)

Կատեգորիա:Ինֆորմատիկա
Կատեգորիա:Ծրագրային ապահովում
Կատեգորիա:Ծրագրավորում
Կատեգորիա:Համակարգային ծրագրեր
Կատեգորիա:Հաշվարկում
Կատեգորիա:Տեղեկատվական անվտանգություն