Previous: Специальные команды, Up: Отладка [Contents][Index]
Значение по умолчанию: false
Если refcheck
равна true
, то Maxima печатает сообщение
каждый раз как имеющая значение переменная используется в вычислении
первый раз.
Значение по умолчанию: false
Если setcheck
равно списку переменных (возможно с индексом),
то Maxima печатает сообщение всякий раз как переменным, или
переменным с индексом, присваивается значение при помощи
обычного оператора присваивания :
, или оператора присваивания
::
, или при связывании параметров функций, но не при
определении функций :=
или макросов ::=
.
Сообщение содержит имя переменной и присваиваемое значение.
Переменной setcheck
может быть присвоено значение all
или true
,
что подразумевает все переменные.
Каждое присваивание setcheck
устанавливает новый список контролируемых переменных
и все переменные, которые ранее были в списке setcheck
, забываются.
Переменные, присваиваемые setcheck
должны быть экранированы, иначе
они могут быть вычислены. Например, если переменные x
, y
и z
уже имеют значения, тогда
setcheck: ['x, 'y, 'z]$
устанавливает контроль присваивания для этих переменных.
Сообщение не выводится, если переменной, включенной в список setcheck
,
присваивается значение равное ей самой, например, X: 'X
.
Значение по умолчанию: false
Если setcheckbreak
равно true
,
то Maxima генерирует прерывание всякий раз как переменной
из списка setcheck
присваивается новое значение.
Прерывание случается до присваивания нового значения.
В этот момент, переменная setval
содержит новое значение переменной.
Таким образом, возможно присвоить переменной другое значение путем
присваивания его переменной setval
.
См. также setcheck
и setval
.
Содержит новое значение, которое будет присвоено переменной, если случается
прерывание, контролируемое setcheckbreak
.
Таким образом, возможно присвоить переменной другое значение путем
присваивания его переменной setval
.
См. также setcheck
и setcheckbreak
.
Добавляет функции f_1, ..., f_n к списку функций,
для которых собирается статистика тайминга.
Последовательные вызовы timer(f)$ timer(g)$
сначала добавляют к списку f
а затем g
, т.е. список пополняется от одного вызова timer
к другому.
timer(all)
добавляет все пользовательские функции,
которые определяются глобальной переменной functions
,
к списку контролируемых функций.
Без аргументов,
timer
возвращает список контролируемых функций.
Maxima сохраняет информацию о времени выполнения контролируемых функций.
Функция timer_info
возвращает статистику тайминга, включающую:
среднее время выполнения, число вызовов и полное время выполнения.
Функция untimer
удаляет функцию из списка контролируемых функций.
timer
не вычисляет свои аргументы.
Команды f(x) := x^2$ g:f$ timer(g)$
не добавят f
к списку
тайминг-контроля.
Если действует трассировка trace(f)
, то timer(f)
не работает,
т.к. trace
и timer
не могут действовать одновременно.
См. также timer_devalue
.
Удаляет функции f_1, ..., f_n из списка тайминг-контроля.
Без аргументов, untimer
удаляет все функции из списка тайминг-контроля.
После выполнения untimer (f)
, функция timer_info (f)
продолжает
содержать ранее собранную статистику, хотя
timer_info()
(без аргументов) не возвращает информацию о
функциях, которые на данный момент не включены в список тайминг-контроля.
Вызов timer (f)
обнуляет всю предыдущую статистику и снова
добавляет f
к списку тайминг-контроля.
Значение по умолчанию: false
Если timer_devalue
равно true
, то Maxima вычитает из статистики
контролируемой функции время выполнения других контролируемых функций.
В противном случае, статистика каждой функции включает время,
затраченное на выполнение других функций.
Заметим, что время, затраченное на выполнение неконтролируемых функций,
не вычитается из общего времени.
См. также timer
и timer_info
.
Для функций f_1, ..., f_n,
возвращает матрицу, содержащую информацию о тайминге каждой из функций.
Без аргументов, timer_info
возвращает информацию для всех
контролируемых функций.
Матрица, возвращаемая timer_info
, содержит: имя функции,
среднее время вызова функции, число вызовов, общее время
и gctime
, что обозначает "время сборки мусора" в Macsyma,
но сейчас это время всегда равно нулю.
Данные, сообщаемые timer_info
, могут быть получены другим способом
при помощи функции get
:
get(f, 'calls); get(f, 'runtime); get(f, 'gctime);
См. также timer
.
Устанавливает трассировку для функций f_1, ..., f_n,
т.е. Maxima будет печатать отладочную информацию при каждом
вызове любой из этих функций.
Последовательные вызовы trace(f)$ trace(g)$
сначала включает трассировку f
а затем трассировку g
, т.е. список трассируемых функций
пополняется от одного вызова trace
к другому.
trace(all)
включает трассировку для всех пользовательских функций,
которые определяются глобальной переменной functions
.
Без аргументов,
trace
возвращает список всех трассируемых функций.
Функция untrace
отменяет трассировку.
См. также trace_options
.
Функция trace
не вычисляет свои аргументы.
Команды f(x) := x^2$ g:f$ trace(g)$
не добавят f
к списку
трассируемых функций.
Если функция переопределяется, то она удаляется из списка трассируемых функций.
Т.е. после timer(f)$ f(x) := x^2$
,
функция f
трассироваться не будет.
Если действует timer (f)
, то trace (f)
не работает;
т.к. trace
и timer
не могут действовать одновременно.
Устанавливает опции трассировки для функции f.
Любые предыдущие опции переопределяются.
trace_options (f, ...)
не действует если не включена
трассировка trace (f)
(либо до, либо после вызова trace_options
).
trace_options (f)
возвращает все опции в значение "по умолчанию".
Существуют следующие ключевые слова опций трассировки:
noprint
Не печатать сообщения при начале и завершении выполнения функции.
break
Установить точки останова до начала выполнения функции и после ее
завершения. См. break
.
lisp_print
Выводить аргументы и возвращаемые значения в виде Lisp объектов.
info
Печатать -> true
при входе и выходе из функции.
errorcatch
Перехватывать ошибки с предоставлением опций: сгенерировать ошибку,
вычислить функцию повторно, задать возвращаемое значение.
Опции трассировки могут задаваться двумя способами.
Одно ключевое слово включает соответствующую опцию безусловно.
Заметим, что для включения опции foo не следует указывать foo: true
,
кроме того, опции не надо экранировать.
Ключевое слово с предикатом включает опцию условно в зависимости
от значения предиката.
Существуют следующие аргументы предиката [level, direction, function, item]
,
где level
есть уровень рекурсии; direction
есть либо enter
, либо exit
;
function
есть имя функции; и item
есть список аргументов (при входе)
или возвращаемое значение (при выходе).
Пример применения безусловных опций трассировки:
(%i1) ff(n) := if equal(n, 0) then 1 else n * ff(n - 1)$ (%i2) trace (ff)$ (%i3) trace_options (ff, lisp_print, break)$ (%i4) ff(3);
Ниже, та же функция условной опцией трассировки break
:
(%i5) trace_options (ff, break(pp))$ (%i6) pp (level, direction, function, item) := block (print (item), return (function = 'ff and level = 3 and direction = exit))$ (%i7) ff(6);
Отменяет трассировку функций f_1, ..., f_n,
установленную ранее при помощи trace
.
Без аргументов, untrace
отменяет трассировку всех функций.
Функция untrace
возвращает список функций, для которых
была отменена трассировка.
Previous: Специальные команды, Up: Отладка [Contents][Index]