В процессе отладки иногда возникает необходимость приостановить работу программы при доказательстве каждой цели. В Прологе для этого имеется средство, называемое методом контрольных точек.
Применение контрольных точек дает возможность пользователю остановить выполнение программы при переходе к новой цели, проверить состояние параметров и, возможно, воздействовать на дальнейший процесс доказательства.
Метод контрольных точек аналогичен пошаговому режиму выполнения команд, применяемому при разработке программ на языке Ассемблера.
Возможные действия в контрольной точке
Возможности, имеющиеся в контрольной точке, зависят от реализации Пролога, но в общем их можно свести к следующим:
a (abort/прекратить) — вернуться на верхний уровень интерпретатора;
b (backtrace/вернуться назад) — показать последние N выполненных целевых утверждений;
f (fail/неудача) — установить результат «неудача» при доказательстве текущей цели;
s (succeed/успе綮) — установить результат «успех» при доказательстве текущей цели.
MS Project 2016 Контрольные точки проекта
Включение и выключение режима контрольных точек
При первой загрузке системы Пролог режим установки контрольных точек обычно бывает отключен. Впоследствии он может быть включен одним из способов, зависящих от реализации Пролога.
Приведем два типичных метода включения режима контрольных точек.
1. Использование механизма прерывания с клавиатуры, например одновременное нажатие клавиш CTRL и S. Повторное нажатие клавиш CTRL и S приводит к отключению режима контрольных точек. Программист имеет возможность применить данный метод при разработке программы за терминалом.
2. Применение предиката spy для включения режима контрольных точек и предиката nospy для выключения. Данный метод служит для проверки отдельных частей программы. Предикат spy необходимо вставить в программу непосредственно перед проверяемым участком, а предикат nospy — сразу после него.
В результате выполнение программы будет приостанавливаться на каждом целевом утверждении из последовательности, находящейся между этими двумя предикатами.
Если происходит повторный запуск Пролог-системы после возникновения ошибки или выполнения операции прерывания в контрольной точке, режим контрольных точек обычно отключается.
Предикаты, содержащие контрольные точки, могут запоминаться системой и выдаваться при включении соответствующего режима.
Необязательные параметры режима контрольных точек
Кроме общих параметров режима контрольных точек, рассмотренных ранее, некоторые реализации Пролога поддерживают специальные параметры. Если это необходимо, пользователю разрешается подключать контрольные точки к любому предикату в своей программе. После присоединения контрольных точек пользователь включает режим контрольных точек, который прерывает выполнение программы только в тот момент, когда целевыми утверждениями становятся предикаты с контрольными точками. Благодаря этому программы на Прологе выполняются обычным образом (за исключением скорости выполнения) между целевыми утверждениями с контрольными точками.
Как работает программа Avtorobot. Контрольные точки кузова.
Источник: studfile.net
Вопрос № 18. Особенности прогона программы с контрольными точками
Прогон (запуск или продолжение выполнения) программы осуществляется командой Run. Для остановки выполнения программы служит команда Break.
Контрольные точки представляют собой специальные маркеры для программы-отладчика и могут быть трёх типов: точки останова, точки трассировки и точки наблюдения.
Вопрос № 19. Контрольные точки: типы, назначение, использование.
Точки останова задаются командой Toggle Breakpoint меню Debug или контекстного меню редактора исходного текста программы. Точка останова обозначается в редакторе исходного текста символом слева от помечаемой строки.
Просмотреть заданные точки останова можно на закладке Breakpoints окна Output; там же точки останова могут быть запрещены (путём сброса флажка напротив точки останова) и разрешены (путём установки флажка). При достижении точки останова во время прогона программы её выполнение приостанавливается.
Повторный вызов команды установки точки останова на той же строке программы приводит к удалению точки останова. Удалить все заданные точки останова позволяет команда Remove Breakpoints меню Debug или команда Remove all Breakpoints контекстного меню закладки Breakpoints окна Output.
Параметры точки останова задаются в диалоговом окне Breakpoint Condition, вызов которого осуществляется командой Breakpoints Properties контекстного меню редактора исходного текста программы. Установка флажка Iterations позволяет задать количество итераций (повторных выполнений) команды до останова прогона программы.
При установке флажка Watchpoint по достижению точки останова производится только обновление значений регистров и ячеек памяти в окнах просмотра. Флажки Iterations и Watchpoint не должны устанавливаться одновременно. Установка флажка Show message обеспечивает отображение сообщений о достижении точки останова на закладке Breakpoints окна Output. Вызов диалогового окна задания свойств и удаление точки останова могут быть произведены из контекстного меню закладки Breakpoints окна Output.
Точки трассировки предназначены для контроля выполнения программы в режиме реального времени. Трассировка позволяет отслеживать так называемую трассу программы – изменение содержимого регистров и ячеек памяти при выполнении определённых команд (команд, по адресам которых заданы точки трассировки). В среде AVR Studio функция трассировки может использоваться только при отладке программы с применением внутрисхемного эмулятора; при работе в режиме симулятора функция трассировки недоступна.
Точки наблюдения задаются командой Add to Watch контекстного меню редактора исходного текста программы. Точки наблюдения представляют собой символические имена регистров или ячеек памяти, содержимое которых необходимо отслеживать.
При выполнении команды Add Watch на экране появляется окно Watches, разделённое на четыре столбца: Name (символическое имя точки наблюдения), Value (значение), Type (тип), Location (местонахождение). Новая точка наблюдения может быть также задана в выделенной ячейке столбца Name окна Watches или командой Quickwatch в окне редактора исходного текста программы (при этом курсор должен находиться на имени регистра или ячейки памяти). Значения, отображаемые в столбце Value, обновляются при изменении содержимого соответствующего регистра или ячейки памяти. Удалить заданные точки наблюдения можно из окна Watches.
Отладчик среды ^ AVR Studio также обеспечивает следующие функции: выполнение до курсора (команда Run to Cursor меню Debug) и последовательное выполнение команд с паузами между ними (команда Auto Step меню Debug). Для удобства использования в процессе отладки ряд команд отладчика доступен с клавиатуры (табл. 2).
Команда отладчика | Клавиша | Команда отладчика | Клавиша |
Run | F5 | Step Into | F11 |
Break | Ctrl+F5 | Step Out | Shift+F11 |
Reset | Shift+F5 | Step Over | F10 |
Run to Cursor | Ctrl+F10 | Toggle Breakpoint | F9 |
Для просмотра и изменения содержимого регистров и ячеек памяти служат команды Registers, Memory, Memory 1, Memory 2, Memory 3 меню View.
По команде Registers на экране отображается окно Registers, в котором приводятся шестнадцатеричные представления содержимого РОН. Изменение (модификация) содержимого регистров производится путём двойного щелчка мышью. Наблюдение за содержимым РОН может быть также произведено с помощью дерева устройств микроконтроллера, находящегося на закладке I/O окна Workspace. Для этого необходимо раскрыть объекты Register 0-15 и
Register 16-31 щелчком мыши по знаку «+». Команды Memory, Memory 1, Memory 2, Memory 3 обеспечивают вызов окон Memory, служащих для отображения содержимого ячеек оперативной и энергонезависимой памяти данных, памяти программ, регистров ввода-вывода и РОН.
Выбор типа памяти, отображаемой в окне Memory, производится с помощью списка, расположенного в панели управления окна (Data – оперативная память данных, Eeprom – энергонезависимая память данных, I/O – регистры ввода-вывода, Program – память программ, Register – РОН). Для наблюдения за состоянием процессора необходимо раскрыть объект Processor закладки I/O окна Workspace.
При этом будет отображена следующая информация: содержимое программного счётчика (Program Counter); содержимое указателя стека (Stack Pointer), количество тактов, прошедших с начала выполнения (Cycle Counter); содержимое 16-разрядных регистров-указателей X, Y и Z; тактовая частота (Frequency); затраченное на выполнение время (Stop Watch). Для контроля содержимого регистров ввода-вывода необходимо раскрыть объект ^ I/O * закладки I/O окна Workspace, где * – тип микроконтроллера. Регистры ввода-вывода, входящие в объект I/O, сгруппированы по типам периферийных устройств. Модифицированные значения содержимого регистров и ячеек памяти действуют только во время текущего сеанса отладки, в исходный текст программы изменения не заносятся.
Источник: studopedia.org
Контрольные точки в исходном коде
Это самый распространенный вид контрольных точек. Точка представляет собой маркер, установленный на некоторой строке исходного кода. Когда управление достигает этой строки, программа приостанавливается.
Проще всего установить контрольную точку такого типа прямо в редакторе кода, щелкнув кнопкой мыши на пробельном поле редактора (слева от текста) рядом со строкой, на которой требуется приостановить программу. В пробельном поле появится красный маркер, и сама строка будет выделена красным цветом фона (рис. 5.1). Повторное нажатие кнопки мыши удаляет контрольную точку.
Рис. 5.1Установка контрольных точек
Если теперь запустить программу кнопкой Run, она будет остановлена на контрольной точке (рис. 5.2).
Зеленая пометка на маркере контрольной точки означает, что точка проверена и признана действительной. Могут быть и недействительные контрольные точки – такие, что установлены на строках, не генерирующих исполняемого кода. Это могут быть комментарии, объявления, пустые строки или операторы, исключенные при оптимизации программы.
Текущая точка исполнения показана в пробельном поле зеленой стрелкой. Она указывает строку, которая должна исполняться следующей. Программу можно продолжить кнопкой Run или выполнять ее операторы в пошаговом режиме, о чем будет сказано ниже.
Рис. 5.2Остановка программы на контрольной точке
То, что мы сейчас показали – это простые контрольные точки в исходном коде; контрольные точки могут быть также условными, со счетчиком проходов или комбинированного типа.
Если вы в данный момент экспериментируете с отладчиком, откройте окно списка контрольных точек (View Debug Windows Breakpoints). Оно отображает все имеющиеся контрольные точки. Контекстное меню окна позволяет запретить остановку программы на контрольной точки, не удаляя ее (пункт Enable). Кроме того, выбрав пункт Properties. вы получите доступ к свойствам выбранной точки (рис. 5.3 и 5.4).
Рис. 5.3Окно Breakpoint List
Рис. 5.4 Диалог Source Breakpoint
В поле Condition диалога Source Breakpoint Properties можно задать условие остановки на контрольной точке. Условие может быть любым допустимым выражением языка C/C++, которое можно оценить как истинное или ложное. Остановка по достижении контрольной точки будет происходить только в том случае, если условие истинно.
Контрольные точки со счетчиком проходов можно считать разновидностью условных. Требуемое число проходов вводится в поле Pass count. Если число проходов установлено равным п, остановка программы произойдет только на n -ом проходе через контрольную точку. Точки со счетчиком удобны при отладке циклов, когда вам нужно выполнить тело цикла определенное число раз и только потом перейти к пошаговому выполнению программы.
Счетчик может быть очень полезен, когда вам нужно определить, на каком проходе цикла возникает ошибка, вызывающая завершение программы. В окне списка контрольных точек отображается не только заданное, но и текущее число проходов точки (например, “7 of 16”). Задав число проходов, равное или большее максимальному числу итераций цикла, вы при завершении программы сразу увидите, сколько раз на самом деле он выполнялся.
Возможна комбинация этих двух типов контрольных точек, которую можно назвать точкой с условным счетчиком. Если для контрольной точки задано и условие, и число проходов, то остановка произойдет только на п-ом “истинном” проходе через нее. Проходы, для которых условие оказывается ложным, “не считаются”.
Условия и счетчик можно задавать для всех видов контрольных точек кроме точек загрузки модуля, т. е. для исходных, адресных и точек данных.
Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:
Источник: studopedia.ru