Рассмотрим процесс отладки с
использованием отладчика M-File Editor/Debugger. Для его
запуска используется команда edit со следующим
синтаксисом:
edit
edit <имя_М-файла>
edit <имя_файла.***>
Команда edit запускает отладчик M-File Editor/Debugger.
Команда edit <имя_М-файла> запускает
отладчик M-File Editor/Debugger и открывает М-файл с
указанным именем.
Команда edit <имя_файла.***> запускает
отладчик M-File Editor/Debugger и открывает файл с
расширением ***.
Экран отладчика приведен на рис. 4.1
Рис. 4.1
Иконки отладки на инструментальной панели
имеют следующее назначение:
Иконка отладки |
Описание |
Команда |
Continue |
Продолжить выполнение М-файла до
его завершения или до первой контрольной точки. |
dbcont |
Set/Clear Breakpoint |
Установить/удалить контрольную
точку в той строке, на которой находится курсор |
dbstop/ dbclear |
Single Step |
Исполнить текущую строку. |
dbstep |
Step In |
Исполнить текущую строку, а если
она включает вызов М-функции, выполнить в ней
останов. |
dbstep in |
Quit Debugging |
Выйти из режима отладки. |
dbquit |
Щелчок правой кнопкой мыши в окне Отладчика
приводит к появлению следующего всплывающего
меню (рис. 4.2), в котором задействованы некоторые
из опций отладчика
Рис. 4.2
Установка контрольных точек.
Большинство сеансов отладки начинается с
установки контрольных точек. Контрольные точки
позволяют приостановить выполнение М-файла в
указанных строках и просмотреть или изменить
значения переменных. Красный знак рядом со
строкой указывает, что установлена в контрольная
точка этой строке. Если строка, выбранная для
контрольной точки, является невыполнимой
строкой, то контрольная точка устанавливается в
первой выполнимой строке.
Замечание
Меню Debug содержит опции, которые позволяют
приостановить выполнение М-файла в следующих
ситуациях:
Ситуация |
Опция |
При возникновении ошибки |
Stop if Error |
При появлении предупреждения |
Stop if Warning |
При появлении результата типа NaN
или Inf |
Stop if NaN or Inf |
В начале сеанса отладки, когда нет уверенности,
в каком из модулей variance.m или sqsum.m может
возникнуть ошибка, видимо, разумно установить
контрольные точки после вычисления среднего
значения и квадрата суммы центрированных
значений в модуле variance.m.
Откроем модуль variance.m и установим контрольную
точку в строке 4:
y =
tot/(length(x)-1);
Номер строки обозначен в правой нижней части
строки состояния (рис. 4.1). Установите контрольную
точку, позиционируя курсор в строке текста, и
нажмите на иконку Set/Clear Breakpoint инструментальной
панели. Другой способ - выбрать опцию Set/Clear Breakpoint
из меню Debug, либо выбрать эту же опцию из
контекстного меню, вызываемого щелчком правой
кнопки мыши.
Контрольные точки М-файла привязаны к его
копии, которая хранится в оперативной памяти.
Если из М-файла удаляются строки в процессе
редактирования или используется команда clear имя
М-файла, то соответствующие или все контрольные
точки будут удалены.
Проверка переменных. Чтобы
задействовать контрольную точку и проверить
значения переменных, следует в командном окне
вызвать функцию variance(v). Когда выполнение М-файла
будет приостановлено в контрольной точке, слева
от текста появится желтая стрелка, которая
указывает на строку, которая должна выполняться
следующей. Желтая стрелка, направленная вниз,
указывает на паузу по завершении выполнения
сценария или функции. Это позволяет проверить
переменные перед возвратом в вызывающую функцию.
Проверим значения переменных mu и tot из среды
отладчика. Для этого выделим имя каждой
переменной и вызвав контекстное меню щелчком
правой кнопки мыши, выберем опцию Evaluate Selection.
Другой способ - выбрать опцию Evaluate Selection из меню
View.
В обоих случаях в командном окне высветится
следующий результат:
K» mu
mu = 3
K» tot
tot = 4
Отсюда следует, что в М-функции sqsum есть ошибка .
Просмотр рабочих областей. Для
просмотра содержимого рабочих областей следует
использовать ниспадающее меню Stack в правом
верхнем углу окна Отладчика. Оно позволяет в
данном случае просматривать как содержимое
рабочей области М-функции variance.m, так и рабочей
области системы MATLAB (Base Workspace).
Применение команды whos в среде М-функции variance.m
дает следующий результат
K» whos
Name |
Size |
Bytes |
Class |
mu |
1x1 |
8 |
double array |
tot |
1x1 |
8 |
double array |
x 1x5 |
40 |
double array |
|
Grand total is 7 elements
using 56 bytes
Применение команды whos в среде Base Workspace - рабочей
области системы дает следующий результат
whos
Name |
Size |
Bytes |
Class |
ans |
1x1 |
8 |
double array |
myvar1 |
1x1 |
8 |
double array |
v 1x5 |
40 |
double array |
|
var1 |
1x1 |
8 |
double array |
Grand total is 8 elements using
64 bytes
В этом списке присутствуют переменные v, var1, myvar1
и, возможно, другие, созданные пользователем в
процессе работы.
Процесс отладки.Удалим контрольную
точку в строке 4 модуля variance.m, поместив курсор на
эту строку и выбрав соответствующую иконку
инструментальной пвнели, либо опцию Clear Breakpoint из
меню Debug. Другой способ - щелчком правой кнопки
мыши вызвать контекстное меню и выбрать опцию Clear
Breakpoint.
Продолжим выполнение, выбрав опцию Continue из меню
Debug. Установим контрольную точку в строке 4
подпрограммы sqsum.m и проверим изменение индекса и
результаты вычислений внутри цикла. При запуске
модуля variance.m останов произойдет в строке 4 модуля
sqsum:
tot = tot + (x(i) - mu).^2;
Вычислим переменную цикла i:
K» i
i = 1
Чтобы выполнить следующую строку, выберем
опцию Single Step из меню Debug или соответствующую
иконку инструментальной шкалы. После останова
вычислим переменную tot:
K
»tot
tot = 4
Снова выполним команду Single Step и убедимся, что
модуль sqsum выполняет цикл for i = 1:length(mu) только один
раз.
Таким образом, цикл выполняется только до
верхнего предела, равного длине скаляра mu, а не
длине входного вектора x.
Выберем опцию Quit Debugging из меню Debug или
соответствующую иконку инструментальной шкалы и
завершим выполнение М-файла.
Исправим заголовок цикла:
Было |
Стало |
for i = 1:length(mu) |
for i = 1:length(x) |
Чтобы убедиться, что внесенное изменение
приводит к правильному результату,
переустановим контрольную точку в строку 4
модуля variance.m и снова запустим его на выполнение.
Выполнение приостанавливается после возврата
управления из модуля sqsum в модуль variance, но перед
той строкой, где используется это значение.
Выведем значение tot после внесенных изменений:
K» tot
tot =
10
Выберем опцию Continue из меню Debug и убедимся, что
полученный результат верен.
Завершение процесса отладки. Выбрать
опцию Exit Editor/Debugger из меню File или соответствующую
иконку инструментальной шкалы и завершить
процесс отладки.
|