Кіріспе
Басқа бағдарламаларды сынау және жөндеу үшін қолданылатын компьютерлік бағдарлама. Дебьюггер немесе жөндеу құралы – басқа бағдарламаларды сынау және жөндеуге арналған компьютерлік бағдарлама (“мақсатты” бағдарлама). Дебьюггердің негізгі мақсаты – мақсатты бағдарламаны бақыланатын жағдайларда іске қосу, бағдарламашыға оның орындалуын қадағалауға және компьютерлік ресурстардағы өзгерістерді бақылауға мүмкіндік беру, бұл өзгерістер жұмыс істемейтін кодты көрсетуі мүмкін. Типикалық жөндеу мүмкіндіктеріне мақсатты бағдарламаны белгілі бір нүктелерде іске қосу немесе тоқтату, жад, CPU регистрлері немесе сақтау құрылғыларының (мысалы, дискілер) мазмұнын көрсету, сондай-ақ қателі бағдарлама орындалуына себеп болуы мүмкін сынақ деректерін енгізу үшін жад немесе регистр мазмұнын өзгерту кіреді. Тексерілетін код нұсқамалар жиынтығын симуляциялайтын құралда (ISS) орындалуы мүмкін, бұл белгілі бір шарттар орындалғанда тоқтатуға мүмкіндік береді, бірақ әдетте тиісті (немесе бірдей) процессорда тікелей орындаудан ақырын жұмыс істейді. Кейбір дебьюггерлер осы әсерді азайту үшін толық немесе ішінара симуляция режимін ұсынады. “Тұзақ” жағдайы бағдарламалау қатесі немесе жарамсыз деректердің салдарынан бағдарламаның қалыпты жұмысын жалғастыра алмағанда туындайды. Мысалы, бағдарлама ағымдағы CPU нұсқасында қолжетімсіз нұсқаулықты пайдалануға тырысқан немесе қолжетімді емес немесе қорғалған жадқа қол жеткізуге тырысқан болуы мүмкін. Бағдарлама “тұзаққа” түскенде немесе алдын ала белгіленген шартқа жеткенде, егер ол бастапқы код деңгейіндегі дебьюггер немесе символдық дебьюггер болса, дебьюггер әдетте бастапқы кодтағы орналасқан жерін көрсетеді, мұндай мүмкіндіктер интеграцияланған даму орталарында жиі кездеседі. Егер ол төмен деңгейдегі дебьюггер немесе машиналық тілдегі дебьюггер болса, ол дисасемблингтегі жолды көрсетеді (егер ол бастапқы кодқа онлайн қол жеткізімділікке ие болмаса және құрастырудан немесе компиляциядан тиісті код бөлігін көрсетуге мүмкіндік бермесе).
A debugger or debugging tool is a computer program used to test and debug other programs (the "target" program). The main use of a debugger is to run the target program under controlled conditions that permit the programmer to track its execution and monitor changes in computer resources that may indicate malfunctioning code. Typical debugging facilities include the ability to run or halt the target program at specific points, display the contents of memory, CPU registers or storage devices (such as disk drives), and modify memory or register contents in order to enter selected test data that might be a cause of faulty program execution. The code to be examined might alternatively be running on an instruction set simulator (ISS), a technique that allows great power in its ability to halt when specific conditions are encountered, but which will typically be somewhat slower than executing the code directly on the appropriate (or the same) processor. Some debuggers offer two modes of operation, full or partial simulation, to limit this impact. A "trap" occurs when the program cannot normally continue because of a programming bug or invalid data. For example, the program might have tried to use an instruction not available on the current version of the CPU or attempted to access unavailable or protected memory. When the program "traps" or reaches a preset condition, the debugger typically shows the location in the original code if it is a source level debugger or symbolic debugger, commonly now seen in integrated development environments. If it is a low level debugger or a machine language debugger it shows the line in the disassembly (unless it also has online access to the original source code and can display the appropriate section of code from the assembly or compilation).
Ерекшеліктері
Әдетте, жөндеушілер (дебаггерлер) сұраныс процессорын, символдарды анықтаушыны, өрнектерді түсіндірушіні және жоғарғы деңгейде жөндеуді қолдау интерфейсін ұсынады. Жөндеушілер сонымен қатар бағдарламаны қадам-қадаммен орындау (бір қадамдық орындау немесе бағдарламалық анимация), белгілі бір оқиғада немесе көрсетілген нұсқауда тоқтату (үзіліс нүктесі арқылы бағдарламаны ағымдағы күйін тексеру үшін тоқтату) және айнымалылардың мәнін қадағалау сияқты күрделі функцияларды ұсынады. Кейбір жөндеушілер бағдарлама жұмыс істеп жатқанда оның күйін өзгертуге мүмкіндік береді. Сондай-ақ, бағдарламаның басқа бөлігінде орындалуды жалғастыруға болады, мысалы, қатеге немесе логикалық қатеге тап болғанда оны айналып өту үшін. Жөндеушіні қателерді түзетуге пайдалы ететін функционалдық мүмкіндіктер, оны бағдарламалық қамтамасыз етуді көшіруден қорғау, цифрлық құқықтарды басқару және басқа да қорғау шараларын бұзу үшін қолдануға мүмкіндік береді. Ол сонымен қатар жалпы тексеру құралы, ақауларды жабу және өнімділікті талдау құралы ретінде де пайдалы, әсіресе нұсқаулардың орындалу жолының ұзындығы көрсетілгенде. Дискіде сақтау құрылғысы бар алғашқы микрокомпьютерлер, бұзылған каталогтар немесе тіркелім деректерін диагностикалау және қалпына келтіруге, "өшірілген" файлдарды қайта қалпына келтіруге немесе файлдарға қойылған парольді бұзуға мүмкіндік алды. Gdb және dbx сияқты көптеген негізгі жөндеу қозғалтқыштары консольдік командалық жол интерфейсін ұсынады. Жөндеушілердің интерфейстері – бұл IDE интеграциясын, бағдарламалық анимацияны және визуализация мүмкіндіктерін қамтамасыз ететін жөндеу қозғалтқыштарының танымал кеңейтімдері.
Жазу және қайталау қателерін түзету
Жазу және қайта ойнату арқылы жөндеу, сондай-ақ "бағдарламалық ұшуды жазу" немесе "бағдарлама орындалуын жазу" деп те аталады, қолданбаның күйіндегі өзгерістерді тіркеп, бағдарламаның әрбір командасы орындалғанда дискіге сақтайды. Бұл жазбаны қайта-қайта ойнатуға болады және ақауларды анықтау және жою үшін оны интерактивті түрде жөндеуге болады. Жазу және қайта ойнату арқылы жөндеу қашықтан жөндеу үшін, сондай-ақ сирек кездесетін, болжамсыз және қайта жасау қиын ақауларды жою үшін өте тиімді.
Кері жөндеу
Кейбір жөндеушілерде "кері жөндеу" деп аталатын, сондай-ақ "тарихи жөндеу" немесе "артқа қарай жөндеу" мүмкіндігі бар. Бұл жөндеушілер бағдарламаның орындалуын уақыт бойынша кері қадаммен орындауға мүмкіндік береді. Әртүрлі жөндеушілерде осы мүмкіндік кездеседі. Microsoft Visual Studio (2010 Ultimate нұсқасы, 2012 Ultimate, 2013 Ultimate және 2015 Enterprise нұсқасы) C#, Visual Basic NET және басқа да кейбір тілдер үшін IntelliTrace кері жөндеуін ұсынады, бірақ C++ үшін ұсынбайды. C, C++, Java, Python, Perl және басқа тілдер үшін де кері жөндеушілер бар. Олардың кейбіреулері ашық кодты, ал кейбіреулері – коммерциялық, меншік бағдарламалық құралдар. Кейбір кері жөндеушілер нысананың жұмысын бірнеше есе баяулатады, бірақ ең жақсылары 2 есе немесе одан да аз баяулатады. Кері жөндеу белгілі бір мәселелерді шешуде өте пайдалы, бірақ әлі кеңінен қолданылмайды.
Уақытпен саяхаттаудың қатесін түзету
Кері дебьюгерлердің мүмкіндіктерінен өзге, уақыт саяхатымен жөндеу пайдаланушыларға бағдарламамен өзара әрекеттесуге, қажет болса тарихты өзгертіп, бағдарламаның бұған қалай ден қоятынын көруге мүмкіндік береді.
Тілге тәуелділік
Кейбір жөндеу құралдары нақты бір тілде жұмыс істейді, ал басқалары бірнеше тілді түсінікті түрде қолдай алады. Мысалы, егер негізгі бағдарлама COBOL тілінде жазылған болса, бірақ құрастыру тіліндегі шақырулар мен PL/1 шақыруларын пайдаланса, жөндеу құралы тіл өзгеретін кезде динамикалық түрде режимдерді ауыстыруға мәжбүр болуы мүмкін.
Жадыны қорғау
Кейбір жөндеушілер буфердің толып кетуі сияқты жад бұзушылықтарын болдырмау үшін жадты қорғау мүмкіндігін де қамтиды. Бұл, әсіресе, жады тапсырмалар бойынша динамикалық түрде жад "қоймаларынан" бөлінетін операцияларды өңдеу орталарында маңызды болып табылады.
Қателерді түзеушілердің алдыңғы жақтары
Кейбір ең қабілетті және танымал жөндеу құралдары тек қарапайым командалық қатар интерфейсін (CLI) қолданады – көбінесе портативтілікті максималдау және ресурстарды азайту үшін. Әдетте, бағдарламашылар графикалық пайдаланушы интерфейсі (GUI) арқылы жөндеуді оңайырақ және тиімдірек деп санайды. Сондықтан, пайдаланушыларға графикалық интерфейс арқылы ғана командалық қатар интерфейсінде жұмыс істейтін жөндеу құралдарын бақылауға және басқаруға мүмкіндік беретін графикалық алдыңғы панельдер пайда болды. Кейбір GUI жөндеу құралдарының алдыңғы панельдері әртүрлі CLI жөндеу құралдарымен үйлесімді болу үшін жасалған, ал басқалары нақты бір жөндеу құралына арналған.