Что такое отладчик в программировании. Пример отладки программы. К чему пришли

  • 31.10.2019

Компиляторы (ассемблеры) и редакторы связей.

Эти два класса программ следует объединить, т.к. в поставку любого современного компилятора входит и редактор связей.

Компилятор (ассемблер) формирует объектный код, переводя программу с языка программирования (языка ассемблера), а редактор формирует исполнимый файл, собирая объектные и библиотечные файлы и редактируя перекрестные ссылки.

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

Язык, с которого производится компиляция;

Диалект/стандарт языка;

Аппаратные платформы и ОС, для которых может формироваться объектный и исполнимый файл;

Наличие возможности и качество оптимизации кода;

Форматы поддерживаемых объектных, библиотечных и исполнимых файлов;

Представители: C/C++: Intel C++ Compiler, Borland C++ Compiler, Watcom C++, GNU C.

Pascal: Free Pascal, GNU Pascal.

Редакторы текстов.

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

Характеристики:

Формат и кодировка обрабатываемых файлов;

Возможность выделения лексем в тексте;

Возможность поддержки оформления текста в соответствии с парадигмами языка;

Возможность вызывать процесс компиляции прямо из редактора;

Возможность генерации части текста программы (чаще бывает не у редакторов, а у сред).

Отладчики.

Предназначены для поиска ошибок в других программах, ядрах операционных систем, SQL-запросах и других видах кода. Отладчик позволяет выполнять пошаговую трассировку, отслеживать, устанавливать или изменять значения переменных в процессе выполнения кода, устанавливать и удалять контрольные точки или условия остановки, отслеживать изменение состояния процессора во время работы программы и т.д.

Различают два основных типа отладчиков:

Отладчики пользовательского режима;

Отладчики режима ядра.

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

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

Характеристики:

Тип (режима ядра/пользовательский);

Поддержка символьной отладки (способность читать исходные коды программы и работать с ними). Набор поддерживаемых языков (сред/диалектов);

Набор отображаемой информации: регистры процессора, стек, память (режимы отображения содержимого памяти);

Поддерживаемые режимы отладки: пошаговый, с точками останова, с реакцией на события в системе;

Состав отслеживаемых событий в системе: аппаратные прерывания, обращения к драйверу (другому модулю ядра), вызов функции и т.д.

- (обычно для отладчиков режима ядра) требования к аппаратной поддержке, возможность работы на «живой» системе;

Возможность анализа файлов дампа.

Представители:

Отладчики пользовательского режима: Turbo Debugger (Borland Software Corporation), Cool Debugger (Wei Bao), W32Dasm, AQtime, FlexTracer, GNU Debugger.

Отладчики режима ядра: i386kd/alphakd/ia64kd и WinDbg (Microsoft Corporation) (для работы в “живую” требуют 2 машины. Для обхода этого ограничения существует надстройка LiveKd (Mark E. Russinovich)), SoftIce (NuMega).

[из методы]

Определение 9.20 Отладчик " это программный модуль, который позволяет выполнить основные задачи, связанные с мониторингом процесса выполнения результирующей прикладной программы.

Определение 9.21 Отладка " это мониторинг процесса выполнения результирующей прикладной программы.

Отладка включает в себя следующие основные возможности:

Последовательное пошаговое выполнение результирующей прикладной программы на основе шагов по машинным командам или по операторам входного языка;

Выполнение результирующей программы до достижения ею одной из данной точек останова (адресов останова);

Выполнение результирующей программы до наступления некоторых заданных условий, связанных с данными и адресами, обрабатываемыми этой программой;

Просмотр содержимого областей памяти, занятих командами или данными результирующей программы.

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

Дальнейшее развитие отладчиков связано со следующими принципиальными моментами:

Появление интегрированных сред разработки;

Появление возможностей аппаратной поддержки средств отладки во многих компьютерных системах.

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

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

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

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

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

Многие их функции интегрированы с функциями текстовых редакторов исходных текстов, входящих в состав систем программирования.

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

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

AQtime - коммерческий отладчик для приложений, созданных для.NET Framework версии 1.0, 1.1, 2.0, 3.0, 3.5 (включая ASP.NET приложения), а также для Windows 32- и 64-битных приложений.

DTrace - фреймворк динамической трассировки для Solaris, OpenSolaris, FreeBSD, Mac OS X и QNX.

Electric Fence - отладчик памяти.

GNU Debugger - отладчик программ от проекта GNU.

IDA - мощный дизассемблер и низкоуровневый отладчик для операционных систем семейства Windows и GNU/Linux.

Microsoft Visual Studio - среда разработки программного обеспечения, включающая средства отладки от корпорации Microsoft.

OllyDbg - бесплатный низкоуровневый отладчик для операционных систем семейства Windows.

SoftICE - низкоуровневый отладчик для операционных систем семейства Windows.

Sun Studio - среда разработки программного обеспечения, включающая отладчик dbx для ОС Solaris и GNU/Linux, от корпорации Sun Microsystems.

Dr. Watson - стандартный отладчик Windows, позволяет создавать дампы памяти.

TotalView - один из коммерческих отладчиков для UNIX.

WinDbg - бесплатный отладчик от корпорации Microsoft.

Отладчик - вторая после компилятора вещь, необходимая для создания программ. Однако многие из тех, кто пишет компьютерные программы и пользуется отладчиком, не в курсе того, каковы принципы и механизмы его работы.


Тяжело быть отладчиком...

В свете того, что программисты используют отладчик денно и нощно, особенно когда войдут в режим глубокой отладки, стоит сказать, что, будь отладчик не программой, а железякой, он бы наверняка перегрелся и сломался. Потому что столько работы, сколько её достаётся отладчику, не имеет даже компилятор.

Конечно, поскольку сейчас множество всяких различных языков программирования, то и отладчики для каждого из них свои. И, естественно, для разных категорий этих языков имеются различия в работе отладчиков: например, отладчик программ на интерпретируемом Ruby будет работать иначе, чем для компилируемого в байт-код языка Java, а отладчик для Java, в свою очередь, будет иметь отличия от отладчика Visual C++.

Я расскажу об отладке для платформы Windows. Поняв принципы работы отладчиков для неё, можно будет разобраться и с отладчиками под POSIX-системы, и с отладчиками, которые работают не на уровне операционной системы, а на уровне виртуальной машины или какого-либо интерпретатора.


Отладчики для Windows: два вида

Существуют два принципиально разных вида отладчиков под Windows. Думаю, с первыми сталкивались все, когда программировали на Delphi (не программировали на нём? С трудом верится. На чём же вы программировали в школе и на младших курсах?). Это отладчики пользовательских приложений. Их немало, и они существуют как по отдельности, так и (особенно, кстати, часто) в составе интегрированных сред разработки приложений. Среди отладчиков, распространяемых как отдельные программные продукты, традиционно выделяют OllyDbg, и о нём я когда-то писал в "Компьютерных вестях".

Второй вид отладчиков - это отладчики ядра операционной системы. Они встречаются и используются реже и по своему устройству значительно отличаются от отладчиков пользовательских приложений. Самый известный, и, одновременно, самый лучший из отладчиков ядра - это SoftIce. Возможно, вы о нём не только слышали, но даже пользовались.

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


Отладчик пользовательских приложений

Отладчик пользовательских приложений устроен проще, поскольку самую чёрную и грязную работу берёт на себя операционная система. В Windows есть специальные программные интерфейсы, которые предназначены для отладки приложений пользовательского уровня - называются они Windows Debugging API. Именно отладочными API пользуются все отладчики, которые встроены в популярные интегрированные среды разработки для Windows.

Для того чтобы отладка началась, отладчик должен запустить отлаживаемый процесс специальным образом - таким, чтобы система знала, что этот процесс будет находиться под отладкой. После этого начинается цикл отладки: программа выполняется до наступления определённого события, которое так и называется - отладочное событие, или debug event. При этом цикл отладки запускается в отдельном потоке, чтобы предотвратить зависание отладчика.

Но это только начало. Потому что самое интересное в работе отладчика начинается уже тогда, когда отладочное событие произошло. Ведь, по сути, в чём заключается работа отладчика? Чтобы помочь программисту локализовать ошибку с точностью до конкретной функции, конкретной операции, конкретной переменной. В этом нелёгком деле отладчику также может помочь операционная система.

Итак, отладочное событие произошло, и дальше надо каким-то образом узнать, как это связано с текстом программы. Это возможно только если в саму программу включена специальная отладочная информация - таблица отладочных символов. Она содержит в себе информацию о соответствии между адресами и именами функций, типов данных, номерами строк кода. Именно благодаря им возможна та отладка, с которой знаком каждый Windows-программист. Таблицы символов имеют разные форматы, а потому не всегда возможно отладить программу, скомпилированную компилятором одного разработчика, с помощью отладчика от другого производителя. Но, правда, самый распространённый формат всё же можно указать - это PDB (Program Database), и разработан он, естественно, корпорацией Microsoft.

Итак, если отладочная таблица символов имеет формат PDB, то можно воспользоваться специальным инструментом от корпорации Microsoft - символьным отладочным процессором. Когда-то он входил в ядро системы и назывался Imagehlp.dll, но уже давным-давно был выделен в отдельную библиотеку. Символьный процессор позволяет находить по заданному адресу ближайшую открытую функцию или глобальную переменную, а также номер строки и название файла с исходным текстом, в котором эта строка находится. Поддерживаются и обратные операции, например, поиск адреса функции по её имени.

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

Но на нюансах мы сейчас останавливаться не будем - в конце статьи я скажу вам, где о них почитать. Сейчас же давайте посмотрим на отладчики ядра.


Отладчик ядра

Отладчики ядра - программы намного более сложные, чем отладчики пользовательских приложений, и, полагаю, вполне понятно, почему: у них отсутствует помощник в виде операционной системы. Она в данном случае является их клиентом, ведь именно её они, в конечном счёте, должны отлаживать.

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

В современных процессорах архитектуры Intel x86 имеются специальные отладочные регистры (и в стареньком 368-м, и в более новых моделях процессоров их всего восемь, они именуются как DR0-DR7). Эти регистры позволяют отладчику ставить контрольные точки на чтение и запись памяти, а также на порты ввода-вывода. В общем виде всё выглядит именно так, и я не думаю, что стоит сейчас расписывать подробно, за что отвечает каждый из отладочных регистров, какими прерываниями реализуются точки останова и давать прочую подобную информацию. Лучше расскажу о конкретных существующих отладчиках ядра для Windows.

Ну, во-первых, это отладчик, встроенный в само ядро операционной системы. Он есть во всех ОС линейки NT, начиная с Windows 2000. Это часть файла NTOSKRNL.EXE, и включить его можно, задав опцию "/Debug" для операционной системы в BOOT.INI. Этот отладчик нуждается в нуль-модемном соединении и втором компьютере с такой же ОС.

Есть ещё один отладчик ядра от Microsoft - WinDBG. Строго говоря, это не отладчик ядра, а гибридный отладчик, который можно использовать и для отладки приложений уровня пользователя. Он, в отличие от отладчика, встроенного в ядро, имеет графическую оболочку, а потому пользоваться им проще. Этот отладчик также поддерживает специальные расширения, которые могут пригодиться при решении некоторых задач отладки. Но и он для отладки ядра требует два компьютера.

Однако существует отладчик ядра, который может осуществлять отладку на одном-единственном компьютере. Это SoftIce. При этом SoftIce умеет отлаживать и прикладные программы. Использование этого отладчика для пользовательских программ оправдано, например, в случае отладки систем реального времени, привязываемых к системному таймеру. Если выполнять отладку с помощью обыкновенного отладчика, то результат может оказаться неправильным даже при правильной работе программы, а SoftIce остановит и программу, и таймер. Это полезно при отладке многопоточных приложений. Ко всему прочему, SoftIce имеет очень, очень хорошо развитые средства вывода информации обо всех потоках в системе, о синхронизации потоков для многопоточных приложений, информации о handle"ах... Единственный минус этого отладчика - его сложность для прикладного программиста. Но из отладчиков ядра это самый простой и эффективный.


Для самых любознательных

Сейчас, конечно, разговор об отладчиках для Windows-приложений не так актуален, как ещё лет десять назад. Весь мир заинтересовался Интернетом, и основными пользователями SoftIce стали крякеры, неутомимые труженики на ниве пиратства. Тем не менее, это не так уж плохо. Общение с SoftIce"ом, несомненно, развивает человека в плане знаний о компьютере, хотя, конечно, если общаться только с отладчиками и не общаться с живыми людьми, возможны некоторые побочные эффекты. Ну, об этом, я думаю, все и так догадываются.

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

Итак, если вам хочется создать собственный отладчик, то сначала стоит ознакомиться с материалами на эту тему. На мой взгляд, самым лучшим пособием для начала будет книга Джона Роббинса "Отладка Windows-приложений". Она уже старая, 2001-го года издания, но информация, изложенная в ней, актуальна и сейчас, поскольку имеет общий, даже в некотором роде фундаментальный характер. В этой книге есть примеры написания отладчиков для Windows, кроме того, она пригодится вам, если вы программируете на C++ и хотите лучше разобраться в обработке исключений. Собственно, именно из этой книги я и почерпнул сведения об отладчиках, изложенные в статье. Если же найти эту книгу не получится (всё-таки, она уже довольно старая), есть несколько адресов, которые могут вам пригодиться. Первый - вот такой: www.xakep.ru/post/19158/default.asp . Эта статья из журнала "Хакер" несколько подробнее рассказывает об отладчиках ядра, чем это сделал я, а кроме того, в ней приведён код простейшего отладчика. А по адресу kalashnikoff.ru/Assembler/issues/016.htm можно узнать о том, как написать DOS-отладчик. Но, конечно, лучше всего читать MSDN и попутно найти какой-нибудь отладчик с открытыми исходными текстами, чтобы в нём разобраться. Ну и, конечно, если вы взялись за написание отладчика, то успехов вам в этом нелёгком деле!

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

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

Современные отладчики чрезвычайно мощны и гибки. Однако ими не следует злоупотреблять там, где надо подумать. Часто несколько дней трассировки дают для поиска ошибки меньше, чем простая попытка объяснить процедуру другому программисту.

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

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

Основные функции отладчика

Трассировка (англ. trace ). Пошаговое выполнение программы, позволяющее программисту точно отслеживать команды в порядке их выполнения.

Контрольные точки (англ. breakpoint ). Средство, предназначенное для того, чтобы заставить программу выполняться до конкретной строки в программе. Специальный вид контрольной точки - точка наблюдения - вызывает выполнение программы, пока не произойдет обращение к определенной ячейке памяти.

Еще одним модулем системы программирования, функции которого тесно связаны с выполнением программы, является отладчик.

Отладчик - это программный модуль, который позволяет выполнить основные задачи, связанные с мониторингом процесса выполнения результирующей прикладной программы. Этот процесс называется отладкой и включает в себя следующие основные возможности:

    последовательное пошаговое выполнение результирующей программы на основе шагов по машинным командам или по операторам входного языка;

    выполнение результирующей программы до достижения ею одной из заданных точек останова (адресов останова);

    выполнение результирующей программы до наступления некоторых заданных условий, связанных с данными и адресами, обрабатываемыми этой программой;

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

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

Дальнейшее развитие отладчиков связано со следующими принципиальными моментами:

Появлением интегрированных сред разработки;

Появлением возможностей аппаратной поддержки средств отладки во многих вычислительных системах.

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

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

Второй шаг позволил значительно расширить возможности сред» " |(отладки. Теперь для них не требовалось моделировать ра(нму и архитектуру соответствующей вычислительной системы. Выполнепи»-результирующей программы в режиме отладки стало возможным в юн же среде, что и в обычном режиме. В задачу отладчика входили юпм функции перевода вычислительной системы в соответствуй и цнп pi ч им перед запуском результирующей программы на отладку. Be > mi ни ом м.. функции являются приоритетными, поскольку зачастую треОукн у». i.т. .т ч системных таблиц и флагов процессора вычислительной стати

Отладчики в современных системах программирои.н.н. представляют собой модули с развитым интерфейсом пот, юн.и.-и .. работающие непосредственно с текстом и модулями m -одном программы. Многие их функции интегрированы с функциями нч< ют... редакторов исходных текстов, входящих в сое urn in. .«mi программирования.

Рассмотрим возможности отладчика системы npoi раммпроп.мм,. Delphi. Это мощный отладчик, встроенный непосрсд» ними... ,-интегрированную среду разработки. Набор поддерживаемы - им .\, п \ """

включает все, что можно ожидать от отладчика: трассировку и пот. и

выполнение, установку точек останова, добавление и про, м. .,. контролируемых значений, вычисление и модификацию дат п.I- > > .-просмотр содержимого стека.

Точки останова (breakpoints ) или просто ociaiumi.i, пот..,.,..-при выполнении определенных условий приостановим. p,.i.,. t , программы. Чаще всего точки останова размещаклся в onpi д. п. пи -строке кода, при этом останов происходит в тот момеш, кпд., д.мт. , строка должна начать выполняться. Такой останов можно у< ми,.п..., например, щелкнув слева от строки кода. Если ш-ш.- ..м.» < проанализировать поведение программы внутри опред.-тч...,.,

процедуры или функции, достаточно просто установить 1 очку о(ми

ое первой строке.

Условная точка останова . Можно задать дополнителын>е у< поим. > ючке останова, и тогда программа будет приостанавливав -.. м достижении определенной строки кода только при выполшч

Современный Гуманитарный Университ

Современный fyw

у» мпиин. Типичным случаем применения такой точки останова будет прпнорка кода внутри цикла. Вероятно, вы не захотите останавливать и мини, запускать программу всякий раз, когда выполняется цикл - а это происходит сотни, а то и тысячи раз. Вместо того, чтобы непрерывно производить повторный запуск программы, можно установить точку мошнова по достижении какой-то переменной определенного значения.

Точка останова по обращению к данным . Этот тип точки останова приостанавливает выполнение программы при модификации определенного участка памяти. Он применяется для низкоуровневой о| падки, когда отслеживаются ошибки присвоения значений переменным. Можно также ввести начальный"адрес области памяти, ююрую i poOyei ся контролировать, и ее размер (в байтах). Устанавливая необходимый размер, можно контролировать переменную любого типа I» char (1 байт) и Integer (4 байта) до массива или записи произвольного размера. Как и в случае точки останова по условию, можно ввести выражение, которое будет критерием останова при изменении области памяти. Это позволяет выявлять ошибки, которые проявляются только после n-го обновления значения переменной.

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

Точка останова по загрузке модуля , как следует из названия останавливает выполнение отлаживаемой программы при загрузке указанного модуля.

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

Пошаговое выполнение программы . Программу можно выполнять последовательно, строка за строкой, используя команды Step Over или Trace Into (по умолчанию клавиши и соответственно). Команда Trace Into при выполнении программы обеспечивает вход в вызываемые процедуры и функции, а команда Step Over немедленно их выполняет и представляет как одно действие. Этими опциями удобно пользоваться после останова программы в каком-то месте ее текста.

Можно также дать указание Delphi выполнять программу до того места, в котором в настоящий момент находится курсор, - с помощью команды Run to Cursor (клавиша ). Эту возможность удобно

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

Использование окна инспектора данных (Watch ). Окно Watch можно использовать для контроля значений переменных по ходу выполнения программы. Программа должна находиться в режиме просмотра кода программы (т.е. выполняться какая-либо из точек останова) - только в этом случае содержимое окна Watch будет корректным. В этом окне можно ввести некоторое выражение Object Pascal или указать определенное в программе имя.

Инспекторы отладки (Debug Inspector ) представляют собой разновидность окна инспектора данных. Они обладают большими возможностями, и их легче использовать, чем окно Watch. В окне инспектора отладки можно просматривать содержимое данных, состоящих из множества индивидуальных элементов, например, таких как классы и записи.

Использование команд Evaluate и Modify . Команды Evaluate и Modify позволяют соответственно просматривать и изменять содержимое переменных, включая массивы и записи, "налету", во время выполнения приложения, в интегрированном отладчике. (Однако они не предоставляют доступ к функциям и переменным вне области видимости.)

Доступ к стеку вызовов (Call Stack ) позволяет просмотреть вызовы функций и процедур вместе с переданными им параметрами, в той последовательности, в которой они выполнялись до определенного момента выполнения программы.

Просмотр потоков (Thread Status ). Если приложение использует множество потоков, встроенный отладчик позволяет получить информацию о каждом из них.

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

Окно CPU содержит пять информационных панелей: CPU, Memory Dump, Register, Flags и Stack. С его помощью разработчик получает возможность узнать, что именно происходит в машине. Каждая из панелей позволяет во время отладки следить за важными аспектами функционирования процессора.

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

Контекстное меню окна CPU позволяет настроить внешний вид окна, просмотреть различные адреса, перейти к инструкции, выполняемой в

Современный Гуманитарный Универси ! 16

Современный Гуманитарный Университет

mi mi - ш . «и vii им i tun i , n iii t - lu -" pnyii . csi к ll |) OCMOTpy ИСХОДНОГО

кода и in i ik ir n- i m" * и-* i ч.if ч ми. м m 11"m.i потока, в котором будет

проема 11 him.111." ".i iiih|m ,| iM.iiimi i I"ll

На naiifiiii Мсмнну i Himp mii + ihi присмотреть содержимое любой области нами i и;п<м мдср + пммп мм-нч (н.пьпредставлено по-разному: как Byle, Woid, nwnHD. uwnni). :>inul<>, Double или Extended. Можно выполнить поиск и ii.immiii mi 1ред(тонной последовательности байтов, модифицирован, юнущио д.тпио и перейти к следующим, либо последовательно, липо ииюш.муя ткущие данные в качестве указателя.

Назначение папок.-и Honji.loi и I lags очевидно: в них отображаются и могут быть изменены т с poincipu и с|)лаги процессора.

На панели Stack можно просмотреть память, используемую приложением в качесто сн."ка. Можно также изменять значения и перемещаться по адресам.