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

Рассмотрим процесс отладки программы, решающей уравнение вида АХ+В=0 без сохранения данных в файле (постановку задачи см. в гл. 3). Будем считать, что форма содержит только элементы, помещенные на вкладке "Данные" (рис. 3.5), и имеет вид (рис. 8.6). Имена текстовых окон для ввода коэффициентов TBA и TBB, а также имя метки для вывода корня LBX, помещены внутри графических изображений указанных объектов. Имена СВ1, СВ2 и СВ3 присвоены командным кнопкам. Имена данных А,В,Х для коэффициентов a,b и корня Х соответственно. Входные и выходные данные


ВХОД

Рис. 8.7. Р-граф программы


Таблица 8.1 Условные обозначения к рис. 8.7 Условия Действия Процедура InDan() Реализуется объектами управления формой То же То же
Нажата кнопка завершения программы Нажата кнопка СВ2 "Корень" Нажата кнопка СВ1 "Очистить" Введен символ, который можно рассматривать как допустимый при вводе чисел Инициализация данных (присвоение им начальных значений) Нажатие доступной кнопки, щелчок мыши или ввод символа Выбор объекта ТВА Выбор объекта ТВВ
Обозначение Выход Корень Очистить Введен символ числа Init Ввод команды Активизация TBА Активизация TBB
Продолжение табл. 8.1 Реализующая процедура (функция) Функция MessX и оператор присваивания Реализуется объектом Text Box Процедура ProgEnd Состояния
Соответствующее действие или условие Расчет корня уравнения и вывод в метку LBX Добавление символа в ТВА.Техt Добавление символа в ТВВ.Техt Завершение программы Начата работа программы, на экране видна форма, ожидается ввод команды или символа На экране видна форма, введена команда Вычислены коэффициенты и корень, сформировано сообщение о корне В буфер клавиатуры введен произвольный символ
Обозначение LBX.Caption=MessX Simb® TBA.Text Simb® TBB.Text Зав. прог Вход, 1

Структура программы



Имя модуля, объекта, секции Содержание
OpDan Описание данных a,b,x Public a as single: Public b as single: Public x as single
Форма Form1
Секция General Sub InDan() "Инициализация данных I=MsgBox("Инициализируются данные", vbOkOnly,"") End sub Sub NullDan() "Очистка формы и данных I=MsgBox("Очистка формы и данных", vbOkOnly,"") End sub Function MessX() "Вычисление корня I=MsgBox("Вычислено а=10, b=5, x=-2", vbOkOnly,"") MessX= "-2" End function Sub EndProg() "Завершение программы I=MsgBox("Программа завершена", vbOkOnly, "") End sub
Form1 Sub Form1_Load() "Загрузка формы Call InDan End sub Sub Form1_Unload "Выгрузка формы из памяти Call EndProg() End sub
CB1 Sub CB1_Click() "Нажатие кнопки Очистить Call NullDan End sub
CB2 Sub CB1_Click() "Нажатие кнопки Корень LBX.Caption=MessX() End sub
CB3 Sub CB3_Click() "завершение программы Call EndProg End End sub

Рис. 8.8. Структура программы

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

Таблица 8.2

Карта тестирования интерфейса

Название теста Действия программиста Реакция программы
Пуск Запуск программы Появление на экране формы и окна с сообщением "Инициализируются данные"
Инициализация ТВА Курсор ставится в ТВА
Инициализация ТВА Курсор ставится в ТВВ
Ввод символов Нажимать алфавитно-цифровые клавиши К содержимому активного текстового окна добавляются вводимые символы. При нажатии клавиши "Забой" правый символ в окне стирается
Очистка Появляется сообщение "Очистка формы"
Расчет Появляется сообщение "Вычислено а=10, b=5, x= -2"
Завершение программы

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

Sub InDan() "Инициализация данных OpDan.a=0: OpDan.b=0: OpDan.x=0 TBA.Text="": NBB.Text="" LBX.Caption="" I=MsgBox("Инициализируются данные"+str(OpDan.a)+" "+str(OpDan.b) +" "+str(OpDan.x), vbOkOnly,"") end sub Рис. 8.9. Текст процедуры InDan() в период отладки Начинаем с процедуры InDan. Назначение процедуры – обнуление данных и очистка формы. Текст процедуры в период отладки приведен на рис. 8.9. В результате тестирования процедуры должны быть достигнуты результаты: переменные a,b,x модуля OpDan должны принять значение нуль, текстовые окна и метка LBX должны быть пустыми.
Sub NullDan() "Очистка формы и данных OpDan.a=0: OpDan.b=0: OpDan.x=0 TBA.Text="": NBB.Text="" LBX.Caption="" I=MsgBox("Очистка формы и данных" +str(OpDan.a)+""+str(OpDan.b)+"" +str(OpDan.x), vbOkOnly,"") End sub Рис. 8.10. Текст процедуры NullDan() в момент отладки Далее отлаживаем процедуру очистки формы. Ее текст в момент отладки приведен на рис. 8.10. Текст процедуры можно скопировать из процедуры InDan, т.к. она выполняет аналогичное назначение. В данном случае вполне можно вместо двух процедур иметь одну. Результат отладки процедуры – нулевые значения данных, описанных в модуле OpDan и пустые текстовые окна и метка LBX.
Процесс отладки обеих процедур одинаков. Запустив программу на исполнение можно по сообщениям проконтролировать правильность выполнения процедур. В случае появления неверных результатов можно перейти в пошаговый режим и, наводя указатель мыши на имена данных, контролировать результаты вычислений. Возможно и применение пошагового режима с включением окна Watches, в которое следует добавить имена перечисленных выше переменных.
Function MessX() "Вычисление корня Dim S as String OpDan.a=val(TBA.Text) OpDan.b=val(TBB.Text) If a<>0 then S=str(-b/a) Elseif ((a=0) and (b=0)) then S="Неопределенный корень" Elseif ((a=0) and (b=0)) then S="Корень не существует" End if MessX= S TBA.Text = str(OpDan.a) TBB.Text = str(OpDan.b) LBX.Caption = str(OpDan.b) I=MsgBox("Вычислены а, b, x", vbOkOnly,"") End function Рис. 8.11. Текст функции MessX в момент отладки Отладка функции MessX (рис. 8.10) выполняется в пошаговом режиме с установкой курсора на первый оператор текста функции. Целесообразно включить окна Watches и Locals и добавить в первое из них имена переменных из модуля OpDan, а во второе будет выводиться значение переменной S. Для отладки используются три набора данных: · a=10.6, b=31.8; · a=0, b=0; · a=0, b=10. Программа запускается командой "Debug/Run to Cursor". Наборы данных вводятся через окна формы. Выполнение программы прерывается на операторе OpDan.a=val(TBA.Text). Далее, применяя команду "Debug/Step Into", выполняем программу в пошаговом режиме и отслеживаем значения переменных.

Первый набор данных инициирует выполнение оператора S=str(-b/a) , второй – оператора S="Неопределенный корень" , третий – оператора S="Корень не существует" . В первом случае значение корня равно (– 3). Вычисленные значения коэффициентов и корня можно наблюдать на форме в текстовых окнах и метке LBX.

Тестирование завершенного кода программы выполняется в соответствии с картой тестирования программы (табл. 8.3).

Таблица 8.3

Карта тестирования программы

Название теста Действия программиста Реакция программы
Пуск Запуск программы Появление на экране формы и окна MsgBox с сообщением "Инициализируются данные"
Инициализация ТВА "Щелчок" мышью по текстовому окну TBA Курсор ставится в ТВА
Инициализация ТВА "Щелчок" мышью по текстовому окну TBB Курсор ставится в ТВВ
Ввод набора данных Ввести набор данных · a=10.6, b=31.8; · a=0, b=0; · a=0, b=10.2 В активном текстовом окне (ТВА или ТВВ) появляются вводимые данные. Должна действовать клавиша "Забой2
Очистка "Щелчок" мышью по кнопке "Очистить" Появляется сообщение "Очистка формы", далее очищаются текстовые окна и метка LBX
Расчет "Щелчок" мышью по кнопке "Корень" Появляется сообщение "Вычислены а, b, x", на форме появляются вычисленные значения коэффициентов и корней
Возврат Повторить один за другим тесты "Очистка", "Ввод данных" и "Расчет" Очищается форма, вводятся данные, вычисляется корень, выводятся коэффициенты (повторно) и корень
Завершение программы "Щелчок" мышью по кнопке "Выход" или по кнопке "Х" Появляется сообщение "Программа завершена"

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

8.2. Создание инсталляционного комплекта
программного средства

После завершения работы по отладке программного средства достаточно легко получить ее исполняемый код. Он может быть построен в двух формах: как независимый исполняемый код и как P-cod (псевдокод), для исполнения которого необходим файл, входящий в комплект поставки Visual Basic и обеспечивающий выполнение программы. Первый код длиннее, но может работать без всяких добавок системы Visual Basic, второй код короче, но требует наличия указанного файла. Обычно предпочитают первый вариант. Способ компиляции указывается в окне "Свойства проекта".

Для построения инсталляционного комплекта (дистрибутива) запускается специальное приложение (Application SetupWizard для Visual Basic 5 и Package and Deployment Wizard для Visual Basic 6). Процесс создания дистрибутива происходит в диалоговом режиме в несколько шагов. Общий вид окон приложения (мастера) Application Setup Wizard приведен на рис. 8.12.

а) б) Рис. 8.12. Окна приложения Application SetUp Wizard "Выбор проекта и настройка" (а) и "Метод распространения" (б) В первом окне Application Setup Wizard выводятся различные сообщения, в частности, о назначении программы и основных действиях, выполняемых ею. Это окно здесь не показано. Следующим шагом является выбор проекта для создаваемого инсталляционного комплекта и настройка работы приложения. Для этой цели служит окно "Выбор проекта и настройка" (рис. 8.12,а). В этом окне устанавливается путь к файлу проекта и опции, позволяющие открыть программу установки с созданием или без создания зависимого файла, создать комплект поставки для распространения через Internet и просто создать зависимый файл. В следующем окне "Метод распространения" (рис. 8.12,б) выбирается способ размещения комплекта на носителях: на одной дискете, в одном каталоге на жестком диске для копирования на CD-Rom или в нескольких каталогах с именами Disk1, Disk2, … для создания комплекта дискет.
а) б) Рис. 8.13. Окна приложения Application Setup Wizard "Каталог-приемник" (а) и "Итоговый файл" (б) В следующем окне делается выбор каталога-приемника, который будет содержать создаваемый инсталляционный комплект. В этом окне указывается диск и путь к файлам инсталляционного комплекта. Дерево папок позволяет выбрать нужный путь к указанным файлам. В следующем окне мастера указываются серверные и локальные компоненты ActiveX. Это окно на рисунке не показано. В предпоследнем окне приложения "Итоговый файл" (рис. 8.13,б) показаны файлы, присоединяемые к файлам проекта. Как правило, это библиотеки *.dll. Приложение Application Setup Wizard автоматически составляет список файлов, которые необходимо добавить в комплект. Имеется возможность добавить свои файлы, кроме добавляемых приложением автоматически. В последних двух окнах выводятся сообщения о том, что комплект собран, и работа приложения завершена. Эти окна

ничем не примечательны и в пособии не показаны.

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

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

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

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

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

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

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

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

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

Представители: 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).

Отладка программы

Отла́дка - этап разработки компьютерной программы , на котором обнаруживают, локализуют и устраняют ошибки. Чтобы понять, где возникла ошибка, приходится:

  • узнавать текущие значения переменных ;
  • выяснять, по какому пути выполнялась программа.

Существуют две взаимодополняющие технологии отладки.

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

Место отладки в цикле разработки программы

Типичный цикл разработки, за время жизни программы многократно повторяющийся, выглядит примерно так:

  1. Программирование - внесение в программу новой функциональности, исправление ошибок в имеющейся.
  2. Тестирование (ручное или автоматизированное; программистом, тестером или пользователем; «дымовое», в режиме чёрного ящика или модульное …) - обнаружение факта ошибки.
  3. Воспроизведение ошибки - выяснение условий, при которых ошибка случается. Это может оказаться непростой задачей при программировании параллельных процессов и при некоторых необычных ошибках, известных как гейзенбаги .
  4. Отладка - обнаружение причины ошибки.

Инструменты

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

Инструменты отладки

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

Также полезными инструментами в руках программиста могут оказаться:

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

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

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

  • Контрактное программирование - чтобы программист подтверждал другим путём, что ему на выходе нужно именно такое поведение программы. В языках, в которых контрактного программирования нет, используется самопроверка программы в ключевых точках.
  • Модульное тестирование - проверка поведения программы по частям.
  • Статический анализ кода - проверка кода на стандартные ошибки «по недосмотру».
  • Высокая культура программирования, в частности, паттерны проектирования , соглашения об именовании и прозрачное поведение отдельных блоков кода - чтобы объявить себе и другим, каким образом должна вести себя та или иная функция.
  • Широкое использование проверенных внешних библиотек.

Безопасность программного кода и отладка

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

  • Выявление недокументированного поведения системы
  • Устранение небезопасного кода

Выделяют такие методы:

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

Литература

  • Стив Магьюир, «Создание надёжного кода» (Steve Maguire. Writing Solid Code . Microsoft Press, 1993)
  • Стив Мак-Коннел, «Совершенный код» (Steve McConnel. Code Complete . Microsoft Press, 1993)

См. также

Ссылки

  • Отладка AMD64 на уровне машинного кода с помощью отладчика dbx (рус.)

Wikimedia Foundation . 2010 .

Смотреть что такое "Отладка программы" в других словарях:

    Этап разработки компьютерной программы, в процессе которого происходят обнаружение, локализация и устранение явных ошибок в программе. Обычно отладка выполняется на контрольных примерах с известными результатами. По английски: Program debugging… … Финансовый словарь

    отладка программы - контроль программы проверка программы программный контроль — [Л.Г.Суменко. Англо русский словарь по информационным технологиям. М.: ГП ЦНИИС, 2003.] Тематики информационные технологии в целом Синонимы контроль программыпроверка… …

    отладка программы - отладка программы; отладка Процесс обнаружения и исправления ошибок в программе, а также установления факта ее правильного функционирования в машине …

    отладка (программы) - — [А.С.Гольдберг. Англо русский энергетический словарь. 2006 г.] Тематики энергетика в целом EN debugging … Справочник технического переводчика

    На ЭВМ обнаружение и исправление ошибок в программе для ЭВМ с помощью самой машины. Производится в 2 этапа: 1) автономная проверка отд. участков программы; 2) комплексная проверка путём решения по отлаживаемой программе неск. примеров, результаты … Большой энциклопедический политехнический словарь

    отладка - программы; отладка Процесс обнаружения и исправления ошибок в программе, а также установления факта ее правильного функционирования в машине … Политехнический терминологический толковый словарь

    отладка машинной программы - — [А.С.Гольдберг. Англо русский энергетический словарь. 2006 г.] Тематики энергетика в целом EN code refinement … Справочник технического переводчика

    ОТЛАДКА - (1) программы систематический процесс поиска и устранения (см.) в (см.), производимый по результатам её прогона на ЭВМ или с помощью специальной вспомогательной программы (отладчика), обеспечивающей заданный режим её отладки и выдающей… … Большая политехническая энциклопедия

    Отладка этап разработки компьютерной программы, на котором обнаруживают, локализуют и устраняют ошибки. Чтобы понять, где возникла ошибка, приходится: узнавать текущие значения переменных; и выяснять, по какому пути выполнялась программа.… … Википедия

Книги

  • Android для пользователя. Полезные программы и советы , Колисниченко Денис Николаевич , Рассмотрены самые интересные, полезные и наиболее популярные среди отечественных пользователей Android-приложения. Даны советы, как превратить Android-устройство в пульт дистанционного… Категория: Операционные системы Издатель:

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

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

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

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

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

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

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

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

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

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

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

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

Второй шаг позволил значительно расширить возможности сред» " |(отладки. Теперь для них не требовалось моделировать ра(нму и архитектуру соответствующей вычислительной системы. Выполнепи»-результирующей программы в режиме отладки стало возможным в юн же среде, что и в обычном режиме. В задачу отладчика входили юпм функции перевода вычислительной системы в соответствуй и цнп 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 можно просмотреть память, используемую приложением в качесто сн."ка. Можно также изменять значения и перемещаться по адресам.

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

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

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

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

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

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

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

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