Проект Порталус


 

CompDocs on-line

Интернет-магазин постеров с доставкой

 
CompDocs
Вебмастеру
Программисту
Пользователю
Геймеру
Мабила
Новости
Отдохни
Беседка
Обои
Партнеры
Docs.com.ru

Web-мастеру:

PHP
ASP .NET
Perl
JavaScript
CSS
HTML
Раскрутка
Сервисы

Программисту:

DirectX
OpenGL
Pascal
Алгоритмы

Пользователю:

Windows
Linux
BIOS
Обои

Посетителю:

Форум
Юмор
Рассылки
Объявления
ФизМат
Тесты
Работа

Обои на рабочий стол
 

Автор: Руслан Ризванов
Источник: mycomp.com.ua

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

Наверное, нет такого программиста, которому бы не приходилось выискивать и исправлять ошибки в своей программе. Обычно для этого используются отладчики (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} кусок кода будет использоваться и компилироваться, если ее убрать — нет.

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

Ссылки по теме:

  • Учебник по C++ Builder
  • Оптимизация приложений С++ в архитектуре клиент/сервер
  • Оформление класса в виде COM объекта в C++
  • Версия для печати Версия для печати [доступна только on-line]
    Комментарии к статье
    Ваше имя:

    Ваш e-mail:
      извещать о новых отзывах в теме
    публиковать мой e-mail
    Комментарий:

    Copyright © 2003-2004 Путяк Владислав.
    Использование материалов журнала разрешается только с указанием ссылки на первоисточники и сайт журнала - http://docs.com.ru



    @ portalus.ru