Отладка разрабатываемой программы 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Отладка разрабатываемой программы



 

Ошибки алгоритма и его реализации

 

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

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

Вообще, процесс написания программы процентов на 60—70 состоит из поиска и устранения ошибок. И основное количество ошибок выявляется при отладке программы. По-английски процесс отладки называется Debug – процесс избавления от ошибок (дословно – процесс ловли блох).

 

Этапы процесса отладки

 

Процесс отладки начинается с перевода программы в соответствующий режим. Если проект открыт, а все его программы записаны и оттранслированы, то для перехода в режим отладки выберите пункт «Start Debugging» в меню «Debug» или нажмите кнопку на панели задач.

Программа начнет процесс подготовки. Процесс длительный. Пока идет подготовка, в нижней части основной панели будет двигаться полоса, показывающая процент выполнения операции. По окончании процесса подготовки программа переходит в новый режим. В окне 1 на передний план выходит вкладка «I/O View» (см. рис. 1.4), которая теперь будет использоваться для просмотра содержимого всех регистров. Причем внешний вид этой вкладки немного изменяется. Для каждого элемента в дереве ресурсов появляется поле, отображающее его содержимое.

В окне 2 на передний план выходит вкладка «Breakpoints and Tracepoints», где теперь будут отображаться все точки останова. В панели инструментов активизируются все инструменты, относящиеся к режиму отладки (до этого они были неактивны). В окне 3 на первый план выходит текст главного программного файла. На левой границе окна этого файла появляется желтая стрелка – указатель текущей выполняемой команды. Указатель установится в начало программы (напротив первой исполняемой команды). Теперь все готово для отладки.

Отладка может выполняться разными методами. Самый простой метод – пошаговое выполнение. Для того, чтобы сделать один шаг, выберите в меню «Debug» пункт «Step into» («Шаг в») либо нажмите кнопку на панели инструментов.

Можно также просто нажать кнопку «F11». В результате программа выполнит одну текущую команду. Указатель текущей команды (желтая стрелка) переместится в следующую позицию. Содержимое регистров изменится в соответствии с выполненной операцией.

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

 

 

Рис.1.4 – Изменение содержимого регистров

 

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

При этом состояние квадратика изменится на противоположное (единица изменится на ноль, либо наоборот). Для изменения значения всего регистра необходимо произвести двойной щелчок мышью по изображению содержимого регистра (в шестнадцатеричном виде). Откроется окно содержимого. В этом окне вы можете выбрать одну из четырех форм представления числа (шестнадцатеричное, десятичное, восьмеричное или двоичное) и изменить это значение в выбранном вами формате. Затем нажмите кнопку «Ok» и изменение «запишется» в соответствующий регистр.

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

Кроме директивы «Шаг в», имеется еще несколько ее модификаций. Их назначение и способы вызова приведены в табл. 1.1.

 

Таблица 1.1 Директивы пошагового выполнения программы

Название Пункт меню “Debug” Кнопка Горячая клавиша Описание
Шаг в Step into F11 Выполнить очередную команду
Шаг через Step over F10 Выполнить очередную подпрограмму
Шаг из Step out Shift+F11 Завершить текущую подпрограмму
Выполнить до Run to cursor Ctrl+F10 Выполнять с текущей строки и до строки, где стоит курсор

 

Директива «Шаг через» используется в том случае, если при пошаговом выполнении программы встретится команда вызова подпрограммы. Если вы не хотите пошагово выполнять всю подпрограмму, вы можете выполнить ее за один шаг. При этом желательно, чтобы подпрограмма не содержала ошибок.

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

Директива «Выполнить до» применяется в том случае, когда какая-либо часть программы не оформлена в виде подпрограммы, но ее желательно выполнить за один шаг. В этом случае в конце выбранного фрагмента вы можете установить текстовый курсор (мигающую вертикальную полоску) и выбрать директиву «Выполнить до». Отладчик за один шаг выполнит все команды, начиная с текущей (отмеченной желтой стрелкой) и вплоть до текстового курсора. Команда в строке с курсором выполняться не будет. Она станет текущей (на нее теперь будет указывать желтая стрелка).


Применение точек останова

 

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

 

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

 

Затем программа запускается под управлением отладчика. Но это – не реальная работа. Это лишь имитация работы микроконтроллера. Программа выполняется строка за строкой, пока в очередной строке не встретится точка останова. Обнаружив такую точку, отладчик приостанавливает выполнение программы.

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

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

 

Таблица 1.2 – Директивы управления точками останова

Название Пункт меню “Debug” Кнопка Горячая клавиша Описание
Поставить точку останова Toggle Breakpoint F9 Поставить (снять) точку останова в строке, где находится курсор
Убрать все точки останова Remove all Breakpoints   - Убрать все поставленные ранее точки останова
Создать программную точку останова New Breakpoints/ Program Breakpoint   -   - Создать точку останова путем задания программного условия
Создать точку останова по данным New Breakpoints/ Data Breakpoint   -   - Создать точку останова путем задания условия по данным

 

 

Для того, чтобы поставить точку останова в какой-либо строке программы, нужно сначала поместить в эту строку текстовый курсор. Затем выбрать директиву «Поставить точку останова» (см. табл. 1.2). Точка останова выглядит как коричневый кружочек напротив выбранной строки программы на левой границе текстового окна.

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

Второй способ простановки точек останова – задание их через меню. Предназначенный для этого пункт «New Breakpoints» меню «Debug» имеет два подпункта. При помощи подпункта «Program Breakpoint» можно устанавливать программные точки останова. То есть точно такие, какие мы ставили предыдущим способом.

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

Для этого вам необходимо заполнить поле «Break execution after: —hits» («Остановить выполнение после: — проходов»). Если число в этом поле не равно нулю, то программа остановится в данной точке останова не с первого раза, а лишь тогда, когда пройдет через нее указанное количество раз.

Если вы установили вашу точку останова не через меню, а напрямую в тексте программы, вы все равно можете вызвать описанный выше диалог и изменить в нем количество проходов, щелкнув; мышью по строке с описанием нужной точки останова во вкладке «Breakpoints and Tracepoints».

При помощи подпункта «Data Breakpoint» пункта «New Breakpoints» меню «Debug» можно задавать точки останова по данным. При выборе этого пункта меню открывается диалог, в котором вы можете выбрать любую из переменных вашей программы или любой ресурс микроконтроллера (из открывающегося списка) и поставить точку останова по обращению к этой переменной (ресурсу).

Программа позволяет выбрать целый ряд условий, при которых наступит останов программы. По умолчанию останов происходит при любом обращении к этой переменной как в режиме чтения, так и в режиме записи. Вы можете выбрать другое условие. Например, при равенстве переменной определенному значению. Выбор условия производится при помощи поля «Break when:» («Остановиться если:») и поля «Access type:» («Тип доступа»). Имя переменной выбирается при помощи поля «Location».

Диалог простановки точек останова обоих видов можно вызывать не только через меню. В верхней левой части вкладки «Breakpoints and Tracepoints» для этого имеется специальная кнопка.

 

 

После того, как вы проставили все точки останова, вы можете запускать программу в режиме автоматического выполнения. Для управления отладчиком в этом режиме программа AVR Studio также имеет несколько специальных директив (см. табл. 1.3). Запуск автоматического выполнения программы производится при помощи директивы «Пуск».

Пока программа находится в режиме автоматического выполнения, новое состояние регистров не отображается. Указатель текущей команды также отсутствует. В нижней строке главной панели программы в правой ее стороне находится индикатор состояния. В режиме останова это желтый кружочек с минусом посередине. Слева от него находится слово «Stopped» (Остановлено). В режиме автоматического выполнения программы желтый кружочек превращается в зеленый с плюсом внутри. Вместо слова «Stopped» появляется слово «Running» (Запущено).

 

Таблица 1.3 Директивы управления процессом отладки

 

Название Пункт меню “Debug” Кнопка Горячая клавиша Описание
Запустить Run F5 Запуск автоматического выполнения программы с текущей команды
Остановить Break Ctrl+F5 Остановка автоматического выполнения программы
Сброс Reset Shift+F5 Исходное состояние (сброс микроконтроллера)
Закончить отладку Stop Debugging Ctrl+Shuft+F5 Закончить отладку

 

Если вы неправильно поставили точку останова или забыли ее поставить, программа будет находиться в режиме автоматического выполнения бесконечно долго. Для досрочной остановки программы используется директива «Остановить». Если в процессе отладки программы понадобится начать все сначала (симитировать сброс микроконтроллера), это можно сделать при помощи директивы «Сброс». По окончании отладки программы необходимо перейти в режим редактирования. Для этого служит директива «Закончить отладку».


 



Поделиться:


Последнее изменение этой страницы: 2016-12-16; просмотров: 421; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 54.160.133.33 (0.14 с.)