Как проверить отладчиком работу программ

Ранее в заметке Основы использования отладчика WinDbg мы узнали, как можно отлаживать приложения под Windows. Теперь настало время познакомиться с отладчиком gdb, который позволяет делать все то же самое под Linux и другими *nix системами. Благодаря этой заметке вы узнаете, как при помощи gdb ставить брейкпоинты и смотреть значения локальных переменных, анализировать coredump’ы и вот это все.

Для комфортной отладки сначала нужно собрать программу с правильными флагами. Во-первых, необходимо указать флаг -g . Иначе программа будет собрана без отладочных символов и отлаживать ее придется в ассемблерном коде (что, впрочем, вполне выполнимо для программ, написанных на чистом Си). Во-вторых, рекомендуется отключить оптимизации при помощи флага -O0 , иначе некоторые переменные окажутся, что называется, optimized out, и вы не сможете посмотреть их значения при отладке.

Другими словами, при прочих равных программу лучше собирать как-то так:

gcc -O0 -g test.c -o test

Запускаем программу в отладчике:

Отладка Java кода в IDEA. Основные возможности отладчика.

gdb . / test

При необходимости передать программе какие-то аргументы можно так:

gdb —args . / test —ololo —trololo

Запуск с так называемом Text User Interface, интерфейсом на основе curses (мне лично он не нравится):

gdb -tui . / test

Еще можно прицепиться к уже работающему процессу по его id:

gdb -p 12345

Для анализа корок используем команду вроде такой:

gdb / path / to / prog / tmp / core_prog.1234

Чтобы корки вообще писались, систему нужно правильно настроить:

ulimit -c unlimited
sudo sysctl -w kernel.core_pattern= ‘/tmp/core_%e.%p’

Плюс в /etc/security/limits.conf пишем что-то вроде:

# где eax — имя вашего пользователя в системе
eax soft core 50000
eax hard core 500000

… а в /etc/sysctl.conf:

kernel.core_pattern = /tmp/core_%e.%p

Кстати, корки можно создавать «вручную» прямо из gdb при помощи команды:

generate-core-file

Для удаленной отладки на сервере выполняем команды:

sudo apt-get install gdbserver
gdbserver : 3003 myprog

На клиенте говорим откуда брать отладочные символы:

gdb -q myprog
target remote 10.110.0.10:3003

Заметьте, что в Ubuntu при попытке прицепиться к своим процессам без sudo вы можете получить ошибку вроде такой:

Could not attach to process. If your uid matches the uid of the target
process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or
try again as the root user.

For more details, see /etc/sysctl.d/10-ptrace.conf

ptrace: Operation not permitted.

Для решения этой проблемы говорим:

sudo sh -c ‘echo 0 > /proc/sys/kernel/yama/ptrace_scope’

… а также правим /etc/sysctl.d/10-ptrace.conf:

kernel.yama.ptrace_scope = 0

Итак, тем или иным образом мы прицепились отладчиком куда надо. Теперь нам доступны следующие команды.

Для выполнения команды в gdb можно вводить либо всю команду целиком, либо только первые несколько букв. То есть, h , he и help или r , ru и run — это все одни и те же команды. Здесь я преимущественно буду использовать короткие версии, так как это то, что вы скорее всего будете использовать на практике. К тому же, соответствующие длинные версии обычно очевидны.

Как найти ошибку в коде Работа с отладчиком

Начать выполнение программы, если она еще не выполняется:

Продолжить выполнение программы:

Прервать выполнение в любой момент можно нажатием Ctr+C.

Отцепиться от программы, оставшись при этом в отладчике:

Выйти из отладчика (если цеплялись через -p , процесс продолжит работу):

Просмотр исходного кода программы:

l
l номер_строки
l откуда,докуда

Если вы отлаживаете программу не на том же сервере, на котором программа была собрана, на него нужно залить исходиники по тому же пути, что использовался на билд сервере, иначе листинг не будет работать.

Когда исходников под рукой нет, можно посмотреть ассемблерный код:

disassemble

Step — шаг вперед или несколько шагов вперед:

Next — как step, только без захода внутрь других методов и процедур:

Until — выполнить программу до указанной строчки:

Продолжить выполнение до возвращения из текущей процедуры:

backtrace
bt

Перемещение между фреймами стака:

Информация о текущем фрейме:

info frame

Показать аргументы в текущем фрейме:

Показать локальные переменные в текущем фрейме:

Источник: eax.me

Фундаментальные основы хакерства. Используем отладчик для анализа 64-разрядных программ в Windows

По­мимо дизас­сем­бли­рова­ния, сущес­тву­ет и дру­гой спо­соб иссле­дова­ния прог­рамм — отладка. Изна­чаль­но под отладкой понима­лось пошаго­вое исполне­ние кода, так­же называ­емое трас­сиров­кой. Сегод­ня же прог­раммы рас­пухли нас­толь­ко, что трас­сировать их бес­смыс­ленно — мы момен­таль­но уто­нем в ому­те вло­жен­ных про­цедур, так и не поняв, что они, собс­твен­но, дела­ют. Отладчик не луч­шее средс­тво изу­чения алго­рит­ма прог­раммы — с этим эффектив­нее справ­ляет­ся инте­рак­тивный дизас­сем­блер (нап­ример, IDA).

«Фундаментальные основы хакерства»

Пе­ред тобой уже во вто­рой раз обновлен­ная вер­сия статьи «Зна­комс­тво с отладчи­ком» (пер­вое обновле­ние пуб­ликова­лось в 2018 году в рам­ках цик­ла «Фун­дамен­таль­ные осно­вы хакерс­тва»). В прош­лый раз текст Кри­са Кас­пер­ски был переде­лан для соот­ветс­твия новым вер­сиям Windows и Visual Studio, а теперь обновлен с уче­том отладки прог­рамм для 64-раз­рядной архи­тек­туры. Читай так­же обновлен­ную пер­вую статью серии. Обе статьи дос­тупны без плат­ной под­писки.

Цикл «Фун­дамен­таль­ные осно­вы хакерс­тва» с «апгрей­дом» пер­вых глав до x86-64 опуб­ликован в виде кни­ги, ку­пить ее ты можешь на сай­те изда­тель­ства «Солон‑пресс».

Способности отладчиков

Пер­вым делом надо разоб­рать­ся в переч­не основных фун­кци­ональ­ных воз­можнос­тей типовых отладчи­ков (без это­го невоз­можно их осмыслен­ное при­мене­ние):

  • от­сле­жива­ние обра­щений на запись, чте­ние и исполне­ние к задан­ной ячей­ке (реги­ону) памяти, далее по тек­сту име­нуемое бря­ком (брей­ком);
  • от­сле­жива­ние обра­щений на запись и чте­ние к пор­там вво­да‑вывода (уже неак­туаль­но для сов­ремен­ных опе­раци­онных сис­тем, зап­реща­ющих поль­зователь­ским при­ложе­ниям про­делы­вать такие трю­ки, — это теперь пре­рога­тива драй­веров, а на уров­не драй­веров реали­зова­ны очень нем­ногие защиты);
  • от­сле­жива­ние заг­рузки DLL и вызова из них таких‑то фун­кций, вклю­чая сис­темные ком­понен­ты (как мы уви­дим далее, это основное ору­жие сов­ремен­ного взлом­щика);
  • от­сле­жива­ние вызова прог­рам­мных и аппа­рат­ных пре­рыва­ний (боль­шей частью уже неак­туаль­но — не так мно­го защит балу­ется с пре­рыва­ниями);
  • от­сле­жива­ние сооб­щений, посыла­емых при­ложе­нием окну;
  • и, разуме­ется, кон­текс­тный поиск в памяти.
Читайте также:
Как проверить активность программы

Как имен­но это дела­ет отладчик, пока знать необя­затель­но, дос­таточ­но знать, что он это уме­ет, и все. Куда акту­аль­нее воп­рос, какой отладчик уме­ет это делать.

В прош­лом в качес­тве отладчи­ка хакеры исполь­зовали широко извес­тный SoftICE. Это был дей­стви­тель­но мощ­ный инс­тру­мент, и даже по про­шес­твии мно­гих лет луч­ше него ничего не было изоб­ретено. Неос­поримым его пре­иму­щес­твом была воз­можность отладки ядра Windows с помощью одно­го компь­юте­ра.

Меж­ду тем, не без дав­ления Microsoft, в 2006 году его раз­работ­ка была прек­ращена. А пос­коль­ку SoftICE очень силь­но зависел от опе­раци­онной сис­темы Windows, в более поз­дних ее вер­сиях он прос­то не работа­ет. Пос­ледней вер­сией Windows, в которой мож­но поль­зовать­ся SoftICE, была Windows XP SP 2. В SP 3 он уже не фун­кци­они­ровал, а в Vista и Windows 7 и подав­но.

SoftICE

Ха­керы, конеч­но, при­уны­ли, но не ста­ли посыпать голову пеп­лом, а начали изоб­ретать аль­тер­натив­ные отладчи­ки. Пос­ледова­ла эпо­ха рас­цве­та новых отладчи­ков. Но какая кар­тина на этом поле сей­час? Нет ни одно­го нового хороше­го отладчи­ка! Передо­вым сре­ди всех был ком­мерчес­кий Syser китай­ских раз­работ­чиков.

Ему про­рочи­ли свет­лое будущее, воз­можность заменить SoftICE, но где он сей­час? Может быть, пара копий сох­ранилась где‑то на фай­ловых свал­ках, но он дав­но не раз­вива­ется.

Syser

Сей­час по боль­шому сче­ту у хакера есть выбор толь­ко из двух по‑нас­тояще­му год­ных отладчи­ков: WinDbg и x64dbg. Пос­ледний годит­ся лишь для иссле­дова­ния при­ложе­ний поль­зователь­ско­го режима, тог­да как с помощью WinDbg мож­но занимать­ся и ядер­ной отладкой Windows. Но в этом слу­чае при­дет­ся исполь­зовать два компь­юте­ра, объ­еди­нен­ных про­водом или по локаль­ной сети.

Современный инструмент кодокопателя

Ког­да‑то хакеры пре­неб­регали WinDbg, но со вре­менем он вырос и стал дей­стви­тель­но мощ­ным и полез­ным инс­тру­мен­том иссле­дова­ния кода. Не сто­ит забывать, что имен­но он исполь­зует­ся коман­дой раз­работ­ки Windows. Для него мож­но изго­тав­ливать рас­ширения путем под­клю­чаемых DLL. Начиная с Windows XP, дви­жок отладки вклю­чен непос­редс­твен­но в опе­раци­онную сис­тему. Он сос­тоит из двух DLL: dbgeng. dll и dbghelp. dll . Кро­ме непос­редс­твен­но средств отладки, в чис­ло которых вхо­дит сам WinDbg, его дви­жок исполь­зует­ся в том чис­ле «Док­тором Ват­соном» ( drwtsn32. exe ).

Средс­тво отладки для Windows сос­тоит из четырех при­ложе­ний, исполь­зующих dbgeng. dll :

  • cdb и ntsd — отладчи­ки поль­зователь­ско­го режима с кон­соль­ным интерфей­сом. Они раз­лича­ются толь­ко одним: при запус­ке из сущес­тву­юще­го кон­соль­ного окна ntsd откры­вает новое кон­соль­ное окно, a cdb это­го не дела­ет;
  • kd — отладчик режима ядра с кон­соль­ным интерфей­сом;
  • WinDbg может исполь­зовать­ся как отладчик поль­зователь­ско­го режима либо режима ядра, но не одновре­мен­но. У WinDbg есть гра­фичес­кий интерфейс.

Сле­дова­тель­но, WinDbg пред­став­ляет собой толь­ко обо­лоч­ку для отладки с помощью движ­ка.

Вспо­мога­тель­ный файл dbghelp. dll исполь­зует­ся внеш­ними тул­зами для иссле­дова­ния внут­реннос­тей Windows, нап­ример отладчи­ком OllyDbg, прог­раммой Process Explorer за авторс­твом Мар­ка Рус­синови­ча и про­чими.

У WinDbg есть две вер­сии: клас­сичес­кая и UWP. Пер­вая уста­нав­лива­ется вмес­те с набором тулз Debugging Tools for Windows. Этот набор содер­жит две вер­сии WinDbg. Одна пред­назна­чена для отладки 32-раз­рядных при­ложе­ний, дру­гая — 64-раз­рядных. Вер­сию UWP мож­но ска­чать из Windows Store, она име­ет толь­ко 32-бит­ную вер­сию.

Обе 32-раз­рядные вер­сии абсо­лют­но рав­ноцен­ны, не счи­тая того, что в UWP прод­винутый поль­зователь­ский интерфейс Windows 10. Кста­ти, весь­ма удоб­ный при работе на боль­шом экра­не.

Для наших экспе­римен­тов я буду при­менять UWP-вер­сию. Раз­ницы в их исполь­зовании прак­тичес­ки нет, могут раз­ве что нем­ного раз­личать­ся коман­ды в поль­зователь­ском интерфей­се, имен­но над­писи на эле­мен­тах интерфей­са, но не коман­ды встро­енно­го язы­ка.

Способ 0. Бряк на оригинальный пароль

С помощью WinDbg заг­рузим лома­емый нами файл — passCompare1. exe — через пункт меню Launch Executable или Open Executable в клас­сичес­ком при­ложе­нии. В даль­нейшем я не буду при­водить ана­логи команд.

www

Сра­зу пос­ле откры­тия исполня­емо­го фай­ла WinDbg заг­рузит при­ложе­ние, в окне Disassembly отладчи­ка появят­ся дизас­сем­бли­рован­ные коман­ды, а в окне Command отоб­разят­ся резуль­таты их выпол­нения.

Пос­ле соз­дания окна при­ложе­ния еще до вывода каких‑либо дан­ных выпол­нение тут же пре­рыва­ется на инс­трук­ции int 3 — это прог­рам­мная точ­ка оста­нова. Час­то нович­ки счи­тают, что выпол­нение прог­раммы начина­ется с фун­кции main или WinMain . Это­му их учат в шко­ле, либо они сами чер­пают такие све­дения из учеб­ников по C/C++. Конеч­но, это неп­равда.

Преж­де чем попасть в фун­кцию main кон­крет­ного при­ложе­ния, про­цес­сор зарыва­ется в деб­ри сис­темно­го кода заг­рузчи­ка обра­зов, выпол­няет горы инс­трук­ций ини­циали­зации при­ложе­ния внут­ри Windows, под­клю­чения биб­лиотек и про­чего. Поэто­му про­изо­шед­ший бряк не озна­чает вход в main нашей прог­раммы. Если взгля­нуть в окош­ко дизас­сем­бле­ра, мы уви­дим, что пре­рыва­ние про­изош­ло в сис­темной фун­кции LdrpDoDebuggerBreak модуля ntdll .

Пер­вым делом заг­рузим отла­доч­ную информа­цию для ком­понен­тов опе­раци­онной сис­темы. Для это­го в коман­дную стро­ку вве­дем

. symfix d: debugSymbols

Эта коман­да опре­деля­ет пап­ку, ука­зан­ную в парамет­ре, куда отладчик при необ­ходимос­ти заг­рузит отла­доч­ные сим­волы для под­систем Windows. Затем надо отпра­вить коман­ду для заг­рузки или обновле­ния фай­лов:

Пос­ле это­го WinDbg заг­рузит нуж­ные дан­ные с сер­веров Microsoft.

Кро­ме того, мож­но вос­поль­зовать­ся уже име­ющей­ся отла­доч­ной информа­цией, для это­го сущес­тву­ет коман­да . sympath+ < путь к директории>. Если файл с отла­доч­ными сим­волами находит­ся в одной пап­ке с исполня­емым фай­лом, он под­хва­тит­ся авто­мати­чес­ки. Еще мож­но исполь­зовать фай­лы исходно­го кода, но в таком слу­чае про­ще вос­поль­зовать­ся отладчи­ком, вхо­дящим в сре­ду раз­работ­ки.

Да­вай поп­робу­ем нат­равить отладчик на дебаж­ную вер­сию passCompare1 и при дос­тижении пер­вой точ­ки оста­нова пос­тавим бряк на фун­кцию main :

bp passCompare1!main

Те­перь про­дол­жим выпол­нение коман­дой g . Ког­да отладчик дос­тигнет пос­тавлен­ной точ­ки оста­нова (начало фун­кции main ), в окне дизас­сем­бле­ра уви­дим, что лис­тинг раз­делен на сег­менты, в заголов­ке которых находят­ся име­на фун­кций, в час­тнос­ти main .

В релиз­ной вер­сии исполня­емо­го фай­ла это­го не будет. Если же мы пос­тавим точ­ку оста­нова по адре­су начала модуля и при­бавим адрес точ­ки вхо­да, то мы попадем не в начало фун­кции main , а в сис­темный заг­рузчик — фун­кцию mainCRTStartup , под­готов­ленную ком­пилято­ром.

Кро­ме Microsoft, мало кто пре­дос­тавля­ет отла­доч­ные сим­волы, не будем при­выкать к лег­кой жиз­ни, тем более WinDbg спе­циаль­но пред­назна­чен для отладки прог­рамм без отла­доч­ной информа­ции и исходно­го кода. Будем при­менять его по наз­начению! Меж­ду тем, если приг­лядеть­ся к окош­ку дизас­сем­бле­ра пов­ниматель­нее, мож­но заметить, что в отли­чие от дизас­сем­бле­ра dumpbin , который мы исполь­зовали в прош­лой статье, WinDbg рас­позна­ет име­на сис­темных фун­кций, чем сущес­твен­но упро­щает ана­лиз.

Читайте также:
Что такое программа universe красота

WinDbg распознает имена системных функций

Точ­ки оста­нова могут быть двух типов: прог­рам­мные и аппа­рат­ные. С пер­выми мы уже встре­чались. В прог­рамме их может быть любое количес­тво.

Для сво­ей работы они модифи­циру­ют память исполня­емо­го про­цес­са, то есть в том мес­те, где дол­жен сто­ять бряк, отладчик запоми­нает ассем­блер­ную инс­трук­цию и заменя­ет ее int 3 . Из‑за того что прог­рам­мная точ­ка оста­нова изме­няет память, ее мож­но уста­новить не вез­де. В этом зак­люча­ется ее основной недос­таток. Глав­ной коман­дой для уста­нов­ки прог­рам­мной точ­ки оста­нова явля­ется bp . Для получе­ния спис­ка уста­нов­ленных точек слу­жит коман­да bl , а для уда­ления — коман­да bc , парамет­ром которой явля­ется индекс точ­ки оста­нова. Звез­дочка в качес­тве парамет­ра уда­ляет все бря­ки. Коман­ды be и bd , соот­ветс­твен­но, вклю­чают и вык­люча­ют брейк‑пой­нты.

Ко­личес­тво аппа­рат­ных точек оста­нова, незави­симо от раз­ряднос­ти про­цес­сора, всег­да четыре. Хотя в про­цес­соре при­сутс­тву­ют восемь регис­тров отладки (DR-0 — DR-7), толь­ко пер­вые четыре могут быть исполь­зованы для хра­нения адре­сов точек оста­нова. Аппа­рат­ные бря­ки могут ста­вить­ся в любое мес­то памяти про­цес­са.

Таким обра­зом, они лишены недос­татка прог­рам­мных бря­ков. Осталь­ные регис­тры пред­назна­чены для хра­нения усло­вий дос­тупа — сра­баты­вания точек оста­нова, нап­ример чте­ние, запись, исполне­ние. Малое количес­тво — основной недос­таток аппа­рат­ных бря­ков. Для уста­нов­ки аппа­рат­ной точ­ки оста­нова исполь­зует­ся коман­да ba с тре­мя парамет­рами: тип дос­тупа, раз­мер и адрес.

Итак, мы рас­смот­рели неболь­шой спи­сок команд внут­ренне­го язы­ка отладчи­ка WinDbg. Навер­няка ты обра­тил вни­мание на их запись. В язы­ке отладчи­ка при­сутс­тву­ют три вида команд:

  • встро­енные коман­ды слу­жат для отладки про­цес­са и записы­вают­ся без лидиру­юще­го сим­вола, к таким коман­дам отно­сят­ся g , bp , bd ;
  • ме­тако­ман­ды управля­ют работой отладчи­ка, перед ними ста­вит­ся сим­вол точ­ки, нап­ример: . reload , . symfix , . cls ;
  • ко­ман­ды‑рас­ширения, заг­ружа­емые из внеш­них DLL, име­ют в начале сим­вол вос­кли­цатель­ного зна­ка, нап­ример: ! heap , ! dh .

Поиск адреса

Да­вай поп­робу­ем нас­коро най­ти защит­ный механизм и, не вни­кая в под­робнос­ти его фун­кци­они­рова­ния, нап­рочь отру­бить защиту. Вспом­ним, по какому адре­су рас­положен в памяти ори­гиналь­ный пароль. Заг­лянем в дамп сек­ции . rdata , где хра­нит­ся пароль. Исходный пароль myGOODpassword находит­ся по сме­щению 0x140002280 . Поп­робу­ем вывес­ти находя­щиеся по это­му адре­су в памяти дан­ные:

dc 0x140002280

Су­щес­тву­ет боль­шое количес­тво команд для отоб­ражения содер­жимого памяти: da , db , dd и про­чие. Мы исполь­зовали dc , потому что она показы­вает зна­чения двой­ных слов и ASCII-сим­волы. Что мы видим? Неини­циали­зиро­ван­ные дан­ные.

Рань­ше (до Windows Vista) кодоко­пате­лям было про­ще. Windows заг­ружала обра­зы в вир­туаль­ную память по опре­делен­ному при ком­пиляции адре­су. В этом лег­ко убе­дить­ся: запус­тим при­ложе­ние в Windows XP, затем при помощи того же SoftICE узна­ем адре­са сек­ций (коман­да mod -u ) и выпишем их. Пос­ле перезаг­рузки сис­темы и пов­торно­го запус­ка при­ложе­ния уви­дим, что они оста­нут­ся неиз­менны­ми.

На­чиная с Windows Vista, прог­раммы пос­ле переза­пус­ка сис­темы получа­ют слу­чай­ные адре­са, а не те, что опре­деле­ны при ком­пиляции. Поэто­му нам при­дет­ся самим искать сек­цию . rdata уже не на дис­ке, а в памяти. Лег­ко ска­зать, но сде­лать еще про­ще!

Най­дем, по какому адре­су рас­положен наш модуль в памяти. Для это­го в отладчи­ке вве­дем lmf m passcompare1 . Вто­рой параметр — имя модуля, адрес которо­го надо опре­делить. В резуль­тате на сво­ем ком­пе я получил:

start end module name
00007ff7`159b0000 00007ff7`159b8000 passCompare1 passCompare1. exe

От­сюда сле­дует, что начало модуля находит­ся по адре­су 0x7ff7159b0000 . Пос­ле каж­дой перезаг­рузки сис­темы модуль кон­крет­ного при­ложе­ния про­еци­рует­ся в раз­личные адре­са. Теперь выведем кар­ту памяти нашего модуля и получим све­дения обо всех сек­циях PE-фай­ла:

!dh passCompare1

Вы­вод коман­ды доволь­но объ­емный. ! dh — в некото­ром роде ана­лог коман­ды map32 из SoftICE, при этом пер­вая пре­дос­тавля­ет боль­ше све­дений. Най­дем в выводе опи­сание целевой сек­ции . rdata :

Источник: xakep.ru

Отладчик

Компьютерная программа, используемая для тестирования и отладки других программ Самостоятельная отладка

A отладчик или инструмент отладки — это компьютерная программа, используемая для тестирования и отладки других программ («целевая» программа). Основное использование отладчика — запуск целевой программы в контролируемых условиях, которые позволяют программисту отслеживать выполняемые операции и отслеживать изменения в ресурсах компьютера (чаще всего в областях памяти, используемых целевой программой или операционной системой компьютера), которые могут указывать на код неисправности. Типичные средства отладки включают возможность запускать или останавливать целевую программу в определенных точках, отображать содержимое памяти, регистров ЦП или запоминающих устройств (например, дисковых накопителей) и изменять содержимое памяти или регистров для ввода выбранных тестовых данных, которые могут быть причиной неправильного выполнения программы.

В качестве альтернативы проверяемый код мог бы выполняться на имитаторе набора команд (ISS), методе, который дает большую мощность в его способности останавливаться при обнаружении определенных условий, но который будет обычно несколько медленнее, чем выполнение кода непосредственно на соответствующем (или том же) процессоре. Некоторые отладчики предлагают два режима работы, полное или частичное моделирование, чтобы ограничить это влияние.

«trap » возникает, когда программа не может нормально продолжить работу из-за ошибки программирования или неверных данных. Например, программа могла попытаться использовать инструкцию, недоступную в текущей версии CPU, или попыталась получить доступ к недоступной или защищенной памяти. Когда программа «перехватывает» или достигает заранее установленного условия, отладчик обычно показывает местоположение в исходном коде, если это отладчик исходного уровня или символический отладчик, который теперь обычно встречается в интегрированные среды разработки. Если это низкоуровневый отладчик или отладчик машинного языка, он показывает строку в дизассемблере (если он также не имеет онлайн-доступа к исходному источнику code и может отображать соответствующий фрагмент кода из сборки или компиляции).

Возможности

Обычно отладчики предлагают обработчик запросов, символ преобразователь, интерпретатор выражений и интерфейс поддержки отладки на верхнем уровне. Отладчики также предлагают более сложные функции, такие как выполнение программы шаг за шагом (пошаговое выполнение или анимация программы ), остановка (нарушение ) (приостанавливает программу для проверки текущего состояния) в некотором событии или указанной инструкции с помощью точки останова и отслеживает значения переменных. Некоторые отладчики могут изменять состояние программы во время ее работы. Также можно продолжить выполнение в другом месте программы, чтобы обойти сбой или логическую ошибку.

Читайте также:
Как продлить отпуск в программе в связи с больничным

Те же функции, которые делают отладчик полезным для исправления ошибок, позволяют использовать его в качестве взлома программного обеспечения для обхода защиты от копирования, управления цифровыми правами и другие функции защиты программного обеспечения. Это часто также полезно в качестве инструмента общей проверки, покрытия ошибок и анализатора производительности, особенно если показаны длины пути инструкций. Ранние микрокомпьютеры с дисковыми хранилищами часто получали выгоду от возможности диагностики и восстановления поврежденных записей данных каталогов или реестра, восстановления файлов, помеченных как удаленные, или взлома защиты файлов паролем.

Большинство основных механизмов отладки, таких как gdb и dbx, предоставляют консольные интерфейсы командной строки. Внешние интерфейсы отладчика — это популярные расширения механизмов отладчика, которые обеспечивают интеграцию IDE, анимацию программ и функции визуализации.

Запись и воспроизведение отладки

Запись и воспроизведение отладки, также известная как «запись полета программного обеспечения» или «запись выполнения программы», фиксирует изменения состояния приложения и сохраняет их на диск в виде каждой инструкции в программа выполняется. Затем запись можно воспроизводить снова и снова и отлаживать в интерактивном режиме для диагностики и устранения дефектов. Отладка с записью и воспроизведением очень полезна для удаленной отладки и для устранения периодических, недетерминированных и других трудно воспроизводимых дефектов.

Обратная отладка

Некоторые отладчики включают функцию под названием «обратная отладка », также известная как «историческая отладка» или «обратная отладка». Эти отладчики позволяют перемещать выполнение программы назад во времени. Эта функция есть в различных отладчиках.

Microsoft Visual Studio (выпуск 2010 Ultimate, 2012 Ultimate, 2013 Ultimate и 2015 Enterprise) предлагает обратную отладку IntelliTrace для C #, Visual Basic.NET и некоторых других языков, но не C ++. Обратные отладчики также существуют для C, C ++, Java, Python, Perl и других языков. Некоторые из них с открытым исходным кодом; некоторые являются проприетарным коммерческим программным обеспечением. Некоторые обратные отладчики замедляют работу цели на порядки, но лучшие обратные отладчики вызывают замедление в 2 раза или меньше. Обратная отладка очень полезна для определенных типов проблем, но все еще широко не используется.

Зависимость от языка

Некоторые отладчики работают на одном конкретном языке, в то время как другие могут прозрачно обрабатывать несколько языков. Например, если основная целевая программа написана на COBOL, но вызывает подпрограммы языка ассемблера и подпрограммы PL / 1, отладчику, возможно, придется динамически переключать режимы на учитывать языковые изменения по мере их появления.

Защита памяти

Некоторые отладчики также включают защиту памяти, чтобы избежать нарушений памяти, таких как переполнение буфера. Это может быть чрезвычайно важно в средах обработки транзакций, где память динамически выделяется из «пулов» памяти для каждой задачи.

Аппаратная поддержка для отладки

Большинство современных микропроцессоров имеют по крайней мере одну из этих функций в их архитектуре ЦП, чтобы упростить отладку:

  • Аппаратная поддержка одношагового режима программа, такая как флаг ловушки.
  • Набор инструкций, отвечающий требованиям виртуализации Попека и Голдберга, упрощает написание программного обеспечения отладчика, которое работает на том же процессоре, что и отлаживаемое программное обеспечение; такой ЦП может выполнять внутренние циклы тестируемой программы на полной скорости и при этом оставаться под контролем отладчика.
  • Внутрисистемное программирование позволяет внешнему аппаратному отладчику перепрограммировать тестируемую систему (например, добавляя или удаление контрольных точек инструкций). Многие системы с такой поддержкой ISP также имеют другую аппаратную поддержку отладки.
  • Аппаратная поддержка кода и данных точек останова, таких как компараторы адресов и компараторы значений данных или, при значительно большем объеме работы, отказ страницы аппаратное обеспечение.
  • JTAG доступ к аппаратным интерфейсам отладки, например, на процессорах архитектуры ARM или с помощью набора команд Nexus. Процессоры, используемые во встраиваемых системах, обычно имеют обширную поддержку отладки JTAG.
  • Микроконтроллеры всего с шестью выводами должны использовать заменители JTAG с небольшим количеством выводов, такие как BDM, Spy-Bi-Wire или debugWIRE на Atmel AVR. DebugWIRE, например, использует двунаправленную передачу сигналов на выводе RESET.

Внешние интерфейсы отладчика

Некоторые из наиболее эффективных и популярных отладчиков реализуют только простой интерфейс командной строки (CLI) — часто для максимизации портативность и минимизация потребления ресурсов. Разработчики обычно считают отладку с помощью графического пользовательского интерфейса (GUI) более простой и продуктивной. Это причина появления визуальных интерфейсов, которые позволяют пользователям контролировать и управлять подчиненными отладчиками, работающими только с CLI, через графический интерфейс пользователя. Некоторые интерфейсы отладчика GUI разработаны для совместимости с различными отладчиками, работающими только с интерфейсом командной строки, в то время как другие предназначены для одного конкретного отладчика.

Список отладчиков

Некоторыми широко используемыми отладчиками являются:

  • Arm DTT, ранее известный как Allinea DDT
  • Eclipse API отладчика, используемый в ряде IDE : Eclipse IDE (Java) Nodeclipse (JavaScript)
  • FirefoxJavaScript отладчик
  • GDB — отладчик GNU
  • LLDB
  • Microsoft Отладчик Visual Studio
  • Radare2
  • TotalView
  • Valgrind
  • WDW, отладчик OpenWatcom
  • WinDbg

Ранние отладчики миникомпьютер включают:

  • Метод динамической отладки (DDT)
  • Инструмент онлайн-отладки (ODT)

Более ранние отладчики мэйнфреймов включают (по дате выпуска):

  • 1974 OLIVER CICS TEST / DEBUG
  • 1980 SIMON BATCH TEST / DEBUG
  • 1985 CA / EZTEST
  • 1990 XPEDITER и Expediter CICS

Текущий мэйнфрейм отладчики:

  • Debug Tool для z / OS
  • XPEDITER и Expediter CICS
  • z / XDC

См. также

  • Портал компьютерного программирования
  • Сравнение отладчиков
  • Дамп ядра
  • Отладчик ядра
  • Список инструментов для статического анализа кода
  • Отладчик памяти
  • Анализатор пакетов
  • Профилирование
  • Отладка путешествия во времени

Ссылки

  • Санжив Кумар Аггарвал; М. Сарат Кумар (2003). «Отладчики языков программирования». В Я. Срикант; Прити Шанкар (ред.). Справочник по проектированию компиляторов: Оптимизация и создание машинного кода. Бока-Ратон, Флорида: CRC Press. С. 295–327. ISBN 978-0-8493-1240-3.
  • Джонатан Б. Розенберг (1996). Как работают отладчики: алгоритмы, структуры данных и архитектура. Джон Уайли и сыновья. ISBN 0-471-14966-7.

Цитаты

Внешние ссылки

Найдите debugger в Викисловаре, бесплатный словарь.
  • Инструменты отладки для Windows
  • OpenRCE: различные ресурсы отладчика и плагины
  • IntelliTrace MSDN, Visual Studio 2015

Источник: alphapedia.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru