Суббота, 20.04.2024, 05:14
Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
Меню сайта
Категории каталога
BlitzMax [14]
Blitz3D [9]
BlitzPlus [0]
Xna [1]
DarkBasic [0]
Общее [3]
Наш опрос
Играете ли вы в Spacer?
1. Да
2. Нет
3. Собираюсь
Всего ответов: 36
Форма входа
Поиск
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Статьи
Главная » Статьи » Blitz3D

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

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

Cинтаксические ошибки

Они возникают в основном из-за опечаток или незнания синтаксиса команды и довольно легко устраняются.

* Неправильное имя команды
* Ошибка в имени переменной
* Указание неверного типа переменной
* Неверный тип данных в строке вызова процедуры
* Нехватка данных в строке вызова Function
* Пропущенные скобки (обычно, закрывающая)
* Не та косая черта ("/" вместо "\" в ссылке на элемент типа)
* Незавершенная структура (If Then без End If, Repeat без Forever, For без Next и т. д.)
* Exit вместо Return в Function

Сбои и коррекция неправильной работы программы

Для поиска таких ошибок обычно используется отладчик. Причины могут быть самые разные:

* Неправильный путь к файлу (или имя файла), отсутствие файла
* Попытка доступа к несуществующему объекту (например, CreateEntity вернул 0)
* Неверная инициализация (или ее отсутствие), неправильное изменение значения переменной
* Упущенный из виду вариант, подлежащий обработке (а это значит нужно писать новую функцию / кусок кода)
* Использование в Write\ReadPixelFast координат, выходящих за пределы изображения
* Использование команд Write\ReadPixelFast без команды LockBuffer
* Попытка доступа к элементу переменной со значением Null пользовательского типа
* Ошибка в загружаемом файле (неверный синтаксис или порядок следования данных)

Знакомство с отладчиком
Когда вы запустите программу, включив Debug Mode, появится окно отладчика. Оно состоит из:

* Панели с кнопками
* Широкого окна с вкладкой Debug Log
* Узкого окошка со вкладками Local, Global, Consts

Кнопки выполняют следующие функции (во время работы программы доступны 1-я и 6-я, во время отладки со 2-й по 6-ю):

1. Светофор с красным сигналом - остановка программы
2. Светофор с зеленым сигналом - продолжение работы программы
3. Стрелка вправо - выполнение текущей строки и переход на следующую без входа в Function
4. Стрелка вправо-вниз - выполнение текущей строки и переход на следующую, при вызове Function - вход
5. Стрелка вправо-вверх - выполнение программы до выхода из Function (если находимся в главной программе, тогда просто пуск)
6. Ядерный взрыв - прекращение работы программы и выход в редактор

В большом окне появляется текст программы (на вкладке с именем файла) с выделенной строкой - текущей, Debug Log - это журнал отладки, вы можете писать в него строки во время выполнения программы с помощью команды DebugLog message$.

Вкладки маленького окошка (обновляются при остановке программы):

* Local - дерево функций, в которые выполнен вход (включая главную программу на первой строке) с используемыми переменными
* Global - список глобальных переменных со значениями
* Consts - список констант со значениями

Во вкладке Local вы можете раскрывать дерево функции, содержащее переменные с их значениями. Раскрыв переменную пользовательского типа, вы можете просмотреть ее элементы и их значения (а если они, в свою очередь являются типами - то раскрыть их).
Точки останова

В редакторе их установка не предусмотрена, поэтому, если вы хотите, чтобы в каком либо месте программа прервалась и вышла в отладчик, поставьте команду "Stop".
Работа с отладчиком - советы

Для начала, нужно определить точку сбоя. Обычно, это несложно - программа выдает сообщение типа "Memory Access Violation" или "Object does not exist" и вылетает в отладчик. Теперь вы можете посмотреть, в какой строке произошел сбой и определить переменную с неправильным значением. Если в строке используются вычисляемые выражения или элементы массива, то чтобы просмотреть их значения, нужно создать переменную, присвоив ей значение этого выражения (или элемента массива):

;Пример кода
WritePixel x+dx(5),y+sqr(xx*xx+yy*yy),-1
;Код, подходящий для отладки
x0=x+dx(5)
y0=y+sqr(xx*xx+yy*yy)
WritePixel x0,y0,-1
;Теперь можно точно узнать координаты записываемого пиксела

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

Если сбой произошел в цикле, полезным будет выяснить, почему предыдущие этапы прошли без сбоев, а текущий вызвал сбой.

Не забывайте о возможности записи значений переменных, а также информации о прохождении какого-л этапа программы в журнал отладки (Debug Log). Это позволит быстро выяснить, где и почему произошел сбой. Можно также выводить отладочную информацию в файл или на экран.

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

Источник: http://blitzetc.boolean.name/articles/debugging.htm

Категория: Blitz3D | Добавил: JohnK (07.06.2007) | Автор: Матвей Меркулов
Просмотров: 1466
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright JohnK© 2024