Команды отладки системы MATLAB -
это набор инструментальных средств, позволяющих
выполнять отладку М-файлов из командной строки.
Краткое описание и синтаксис команд
представлены в следующей таблице:
Описание команды |
Синтаксис команды |
Установить контрольную точку |
dbstop [in] <имя_М-файла>[at]
<номер_строки> |
Удалить контрольную точку |
dbclear [in] <имя_М-файла> [at]
<номер_строки> |
Остановить выполнение при
возникновении предупреждения или ошибки, либо
при появлении результата NaN или Inf |
dstop [if] warning
dstop [if] error
dstop [if] naninf
dstop [if] infnan
[ ] - необязательные служебные слова |
Продолжить выполнение |
dbcont |
Стек вызываемых функций |
dbstack |
Список контрольных точек данной
М-функции |
dbstatus <имя_М-файла> |
Выполнить одну или несколько
строк |
dbstep <количество_строк> |
Листинг М-функции с
пронумерованными строками |
dbtype <имя_М-файла> |
Переход между рабочими
областями сверху вниз |
dbdown |
Переход между рабочими
областями снизу вверх |
dbup |
Завершить отладку |
dbquit |
Используя командную строку, можно выполнить
все функции отладки. В качестве примера
воспользуемся М-функциями variance и sqsum, описанными
выше. Тексты этих функций представлены в
следующей таблице:
function y = variance(x)
mu = sum(x)/length(x);
tot= sqsum(x, mu);
y = tot/(length(x)-1); |
function tot = sqsum(x, mu)
tot = 0;
for i = 1:length(mu)
tot = tot + ((x(i)-mu).^2);
end |
Установка контрольных точек. Команда
dbstop позволяет установить контрольную точку в
определенной строке программы.
Для того чтобы установить контрольные точки в
модуле variance после вычисления среднего значения
(строка 2) и квадрата суммы центрированных
значений (строка 3) следует воспользоваться
следующими командами
dbstop variance 3
dbstop variance 4
Отладка кода в режиме работы с клавиатурой.
Возьмем в качестве входных данных вектор v = [1 2 3 4
5]. Ожидаемые величины для среднего значения и
суммы квадратов центрированных значений
соответственно 3 и 10. Эти значения и должны быть
получены в контрольных точках. Обратимся к
М-функции из командной строки:
variance(v)
При останове в контрольной точке MATLAB
автоматически переходит в режим работы с
клавиатурой, который помечается приглашением K. В
этом режиме можно исполнять любые команды
системы MATLAB. Для продолжения выполнения
программы следует использовать команду dbcont.
При первой остановке в контрольной точке
рекомендуется использовать команду whos, которая
позволяет увидеть все переменные рабочей
области модуля variance:
K» whos
Name |
Size |
Bytes |
Class |
mu |
1x1 |
8 |
double array |
x 1x5 |
40 |
double array |
|
Grand total is 6 elements using 48
bytes
Общее количество
элементов - 6; использовано байтов - 48
Проверим значение mu:
K» mu
mu =
3
Воспользуемся командой dbstep, чтобы выполнить
одну строку программы; произойдет останов в
строке 4 и теперь можно проверить значение
переменной tot, которое соответствует сумме
квадрратов центрированных входных значений:
K >> tot
tot =
4
Это означает, что неправильные вычисления
связаны с модулем sqsum.
Перемещение по рабочим областям.
Используя функции dbup и dbdown, можно перемещаться от
рабочей области одной функции к другой, а также
рабочей области системы MATLAB. Для того чтобы войти
в рабочую область системы MATLAB из модуля variance,
достаточно применить команду
K» dbup
In
base workspace.
K» whos
Name |
Size |
Bytes |
Class |
v 1x5 |
40 |
double array |
|
Grand total is 5 elements using 40 bytes
Общее количество элементов - 5;
использовано байтов - 40
Переменная v, а также, возможно, другие
переменые, введенные пользователем, могут
появиться в этом списке. Чтобы вернуться обратно
в рабочую область модуля variance достаточно
применить команду dbdown.
Листинг М-файла. В режиме клавиатуры
можно использовать команду dbtype sqsum, чтобы вывести
на экран листинг М-файла sqsum с пронумерованными
строками:
K» dbtype sqsum
1 function tot = sqsum(x,mu);
2 tot = 0;
3 for i = 1:length(x)
4 tot
= tot + ((x(i)-mu).^2);
5 end
Установим контрольные точки, чтобы проверить
величины вычисляемых значений и переменной
цикла:
K>> dbstop sqsum 4
K>> dbstop sqsum 5
Просмотр стека вызванных функций и
продолжение выполнения. Для выхода из
режима клавиатуры предназначена команда dbquit. Для
удаления контрольных точек в модуле variance следует
использовать команду
dbclear variance
При этом контрольные точки в модуле sqsum
сохраняются.
Снова запустим на выполнение модуль variance, вновь
используя в качестве входного вектор v:
variance(v)
4
tot = tot + ((x(i)-mu).^2);
Применим команду dbstack, чтобы проверить стек
вызванных функций и убедиться, что М-функция variance
действительно вызвала М-функцию sqsum:
K» dbstack
> In d:\matlab5\sqsum.m at
line 4
In
d:\matlab5\variance.m at line 3
Проверим значение переменной цикла i и значение
tot.
K» i
i =
1
K» tot
tot = 0
Выполним строку 4 и в контрольной точке строки 5
снова проверим значения i и tot:
K» dbstep
5
end
K» i
i =
1
K» tot
tot = 4
Значение tot изменилось; выполним строку end и
вернемся к заголовку цикла; сделав еще один шаг,
применим команду dbstack
K>>
dbstep
K» dbstack
>In
d:\matlab5\variance.m at line 4
Таким образом модуль sqsum выполнил цикл только
один раз и возвратился в модуль variance.
Внимательно присмотревшись к заголовку цикла
for i = 1:length(mu)
можно придти к выводу, что в нем есть ошибка.
Окончание цикла задано длиной переменной mu, a не
длиной входного вектора x.
Убедимся, что правильное значение tot, равное 10,
приводит к верному результату; присвоим
переменной tot значение 10; тогда продолжив
выполнение, получим верный результат:
K» tot=10
tot = 10
K>>
dbcont
ans = 2.5000
Таким образом, в заголовке цикла надо заменить
переменную mu на переменную x.
Завершение сеанса отладки. Чтобы
завершить сеанс отладки, следует применить
команду dbquit и таким образом возвратиться в
рабочую область системы MATLAB. После этого следует
внести исправления в М-функцию sqsum.m, так чтобы
переменная цикла изменялась от 1 до length(x), а не от 1
до length(mu), то есть заголовок цикла должен иметь
вид:
for i =
1:length(x)
Повторим запуск модуля variance.m и получим
требуемый результат:
variance(v)
ans = 2.5000
|