Для
отладки процедур в Maple имеется также более мощное
средство - отладчик процедур. Отладчик
вызывается автоматически при встрече с одной из
меток, установленных в процедуре: stopat,
stopwhen, stoperror.
Когда отладчик вызывается он выводит на
экран выражение, команду, которая должна
выполняться следующей и приглашение ввода
команды отладчика DBG>.
Если отладчик вызван командой
прерывания (stopat), выводимое на экран выражение
есть результат последней выполненной команды.
Если он вызван командой наблюдения за переменной
(stopwhen), выражение представляет собой равенство,
левая часть которого - имя наблюдаемой
переменной, а правая часть - значение,
присвоенное этой переменной. Если отладчик
вызван меткой сообщения об ошибке (stoperror),
выражение - сообщение об ошибке.
Перечислим некоторые команды, которые
можно вводить в режиме отладки:
cont
продолжить выполнения процедуры до следующей
точки прерывания или до конца;
step
выполнить следующую команду;
quit, done, or stop
полностью остановить выполнение процедуры;
showstat [имя процедуры] [номер
оператора[..номер оператора]]
вывести на экран операторы заданной процедуры с
заданными номерами;
showstop
вывести на экран список всех процедур,
содержащих метки;
stopat [имя процедуры ] [номер оператора]
[условие]
установить точку прерывания в заданной
процедуре на операторе с заданным
номером. Необязательное "условие",
которое должно быть булевым выражением приводит
к
остановке программы только в случае
выполнения "условия";
unstopat [имя процедуры] [номер оператора]
удалить из процедуры указанную точку прерывания;
stopwhen [имя процедуры переменная]
установить точку наблюдения за заданной
локальной или глобальной
переменной и вывести на экран список
точек наблюдения;
unstopwhen [имя процедуры переменная]
удалить из процедуры точки наблюдения за
заданной переменной;
stoperror [сообщение об ошибке]
устанавить точку наблюдения за заданной ошибкой
или вывести список установленных меток;
unstoperror [сообщение об ошибке]
удалить точку наблюдения за ошибкой;
любое выражение Maple
вычислить значение выражения в точке
останова
Приведем пример. Пусть задана процедура
и команда прерывания, включающая отладчик
> f := proc(x,y) local a; global b;
if x < y then
a := x; b := y + a;
else
a := y; b := x + a;
fi;
a + b + x + y
end:
stopat(f);
> f(2,3);
f:
1* if x < y then
...
else
...
fi;
DBG> stopwhen b #
`устанавливаем точку наблюдения за переменной b`
[]
f:
1* if x < y then
...
else
...
fi;
DBG> cont # `продолжаем
выполнение программы`
> showstat # `выводим на
экран текущее состояние`
>
>
Warning, premature end of input
DBG> quit # `выходим из
режима отлачика`
Warning, computation interrupted
|