CFA LogoCFA Logo Computer
Новости Статьи Магазин Драйвера Контакты
Новости
RSS канал новостей
В конце марта компания ASRock анонсировала фирменную линейку графических ускорителей Phantom Gaming. ...
Компания Huawei продолжает заниматься расширением фирменной линейки смартфонов Y Series. Очередное ...
Компания Antec в своем очередном пресс-релизе анонсировала поставки фирменной серии блоков питания ...
Компания Thermalright отчиталась о готовности нового высокопроизводительного процессорного кулера ...
Компания Biostar сообщает в официальном пресс-релизе о готовности флагманской материнской платы ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2002 ГОД

Идет охота на жуков

Руслан РИЗВАНОВ rizvanov_ruslan@mail.ru

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

Bug — с англ. насекомое (особ. кровососущие), ЖУК.

В этой статье речь пойдет об элементарных возможностях отладки в популярных на сегодняшний день визуальных средах программирования Delphi и C++ Builder. Они практически ничем друг от друга не отличаются (разумеется, кроме используемых языков программирования) и имеют встроенный отладчик. Последний является стандартным инструментом для borland’овских продуктов, знакомым многим программистам (особенно пишущим на ассемблере) еще с тех времен, когда он был отдельной программой и назывался Turbo Debugger.

Да, программа запущена, сильно запущена…

Существуют ошибки синтаксические и логические, есть и такие, которые возникают на этапе выполнения программы — runtime errors. Если с синтаксическими все ясно (у некоторых еще со школы :-)), с runtime тоже (например, деление на ноль отладчиком можно отследить), то логические — самые нежелательные. Они, как это обычно водится, появляются там, где их никто не ждет, множатся, накладываясь друг на друга, и в особо тяжелых случаях заставляют программиста всерьез задуматься о смысле жизни :-)… или о написании программы заново.

Почти все ошибки можно найти, используя команды средств отладки. По своему предназначению они делятся на команды для пошагового выполнения программы, для наблюдения переменных стека (стек — часть памяти, отводящаяся программой для временного хранения данных; в ассемблере также используется для передачи параметров подпрограмм), регистров и пр. Для пошагового выполнения программы в рассматриваемых визуальных средах имеются команды в выпадающем меню Run Step Over, Trace Into, Trace to Next Source Line, Run to Cursor, Run Until Return. Их удобно использовать с так называемыми точками останова, которыми отмечаются строки, где произойдет остановка выполнения программы. Это нужно затем, чтобы не выполнять построчно всю программу, а сразу перейти к интересующему месту.

Для установки точки используется команда Add Breakpoint/Source Breakpoint (F5) или же щелчок мыши по полю слева от текста программы, там появится красная отметка (см. Рис. 1). После этого нажатием клавиши F4 (Run To Cursor) программа запускается на выполнение в режиме отладки. Как только отладчик дойдет до строки с установленной точкой останова, выполнение программы приостановится. В этот момент можно узнать значения интересующих переменных. Для этого командой Add Watch (Ctrl+F5) открывается окно Watch Properties. В нем в строке Expression указывается название переменной, а ниже —Рис. 1тип. После нажатия OK переменная появляется в списке Watch List.

Если с остальными типами переменных все ясно, то просмотр значений массивов требует отдельного рассмотрения. Их удобно просматривать с помощью команды Evaluate/Modify в том же выпадающем меню Run по Ctrl+F7. Она открывает окошко, из которого можно получить доступ и к Watch List’у, установить значения переменных (при этом в тексте программы ничего не изменится) —Evaluate, Modify, а также с помощью команды Inspect получить информацию о переменной. Например, о массиве — он будет отображен в виде аккуратной матрицы.

Но вернемся командам пошагового выполнения программы. После того как произошла остановка на точке останова, с помощью команд Trace Over (F8) и Trace Into (F7) можно выполнять программу далее построчно. Эти команды отличаются тем, что первая при пошаговом выполнении не затрагивает тело процедур и функций, а вторая — наоборот. Если в программе есть другие точки останова — нажатием F4 (Run To Cursor) сразу осуществляется выполнение программы до ближайшей из них.

Ряд средств наблюдения имеется и в выпадающем меню View в разделе Debug Windows. С помощью команд, содержащихся в нем, можно просмотреть список установленных точек останова Breakpoints, содержимое стека Call Stack. Следующие команды работают при запущенной программе или в процессе отладки: Local Variables (локальные переменные) — список переменных, объявленных в процедурах и функциях; Threads — список используемых программой потоков; Modules — с помощью этой команды можно узнать какие .dll и .exe использует ваш процесс (программа); Event Log — показывает, какие события происходят в вашем процессе; CPU — окно, содержащее системную информацию о содержимом регистров, состоянии флагов процессора, ассемблерный код программы, содержимое памяти; FPU — показывает содержимое регистров и состояние флагов сопроцессора.

Кроме всего перечисленного, в Delphi существуют директивы условной компиляции. С их помощью можно определять, что должно компилироваться, а также использовать в программе временные куски кода и промежуточные переменные. Например, директивой $Define определим название блока программы, в котором будет расположен временный кусок кода — в программе он будет иметь следующий вид:

временный кусок кода

При наличии в начале программы директивы {$Define Debug} кусок кода будет использоваться и компилироваться, если ее убрать — нет.

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

Рекомендуем ещё прочитать:






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы или вычислите пример: *
captcha
Обновить





Хостинг на серверах в Украине, США и Германии. © sector.biz.ua 2006-2015 design by Vadim Popov