Maxima Manual: Функции и переменные для отладки

Previous: Специальные команды, Up: Отладка [Contents][Index]

### 39.3 Функции и переменные для отладки

Управляющая переменная: refcheck

  Значение по умолчанию: `false`

  Если `refcheck` равна `true`, то Maxima печатает сообщение каждый раз как имеющая значение переменная используется в вычислении первый раз.

  Категории:Вычисление ·Работа в консоли ·Глобальные флаги ·

Управляющая переменная: setcheck

  Значение по умолчанию: `false`

  Если `setcheck` равно списку переменных (возможно с индексом), то Maxima печатает сообщение всякий раз как переменным, или переменным с индексом, присваивается значение при помощи обычного оператора присваивания `:`, или оператора присваивания `::`, или при связывании параметров функций, но не при определении функций `:=` или макросов `::=`. Сообщение содержит имя переменной и присваиваемое значение.

  Переменной `setcheck` может быть присвоено значение `all` или `true`, что подразумевает все переменные.

  Каждое присваивание `setcheck` устанавливает новый список контролируемых переменных и все переменные, которые ранее были в списке `setcheck`, забываются.

  Переменные, присваиваемые `setcheck` должны быть экранированы, иначе они могут быть вычислены. Например, если переменные `x`, `y` и `z` уже имеют значения, тогда

      setcheck: ['x, 'y, 'z]$

  устанавливает контроль присваивания для этих переменных.

  Сообщение не выводится, если переменной, включенной в список `setcheck`, присваивается значение равное ей самой, например, `X: 'X`.

  Категории:Работа в консоли ·Глобальные флаги ·

Управляющая переменная: setcheckbreak

  Значение по умолчанию: `false`

  Если `setcheckbreak` равно `true`, то Maxima генерирует прерывание всякий раз как переменной из списка `setcheck` присваивается новое значение. Прерывание случается до присваивания нового значения. В этот момент, переменная `setval` содержит новое значение переменной. Таким образом, возможно присвоить переменной другое значение путем присваивания его переменной `setval`.

  См. также `setcheck` и `setval`.

  Категории:Работа в консоли ·Глобальные флаги ·

Системная переменная: setval

  Содержит новое значение, которое будет присвоено переменной, если случается прерывание, контролируемое `setcheckbreak`. Таким образом, возможно присвоить переменной другое значение путем присваивания его переменной `setval`.

  См. также `setcheck` и `setcheckbreak`.

  Категории:Работа в консоли ·Глобальные переменные ·

Функция: timer (f_1, ..., f_n)
Функция: timer (all)
Функция: timer ()

  Добавляет функции 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`.

  Категории:Отладка ·

Функция: untimer (f_1, ..., f_n)
Функция: untimer ()

  Удаляет функции f_1, ..., f_n из списка тайминг-контроля.

  Без аргументов, `untimer` удаляет все функции из списка тайминг-контроля.

  После выполнения `untimer (f)`, функция `timer_info (f)` продолжает содержать ранее собранную статистику, хотя `timer_info()` (без аргументов) не возвращает информацию о функциях, которые на данный момент не включены в список тайминг-контроля. Вызов `timer (f)` обнуляет всю предыдущую статистику и снова добавляет `f` к списку тайминг-контроля.

  Категории:Отладка ·

Управляющая переменная: timer_devalue

  Значение по умолчанию: `false`

  Если `timer_devalue` равно `true`, то Maxima вычитает из статистики контролируемой функции время выполнения других контролируемых функций. В противном случае, статистика каждой функции включает время, затраченное на выполнение других функций. Заметим, что время, затраченное на выполнение неконтролируемых функций, не вычитается из общего времени.

  См. также `timer` и `timer_info`.

  Категории:Отладка ·Глобальные флаги ·

Функция: timer_info (f_1, ..., f_n)
Функция: 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`.

  Категории:Отладка ·

Функция: trace (f_1, ..., f_n)
Функция: trace (all)
Функция: trace ()

  Устанавливает трассировку для функций 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` не могут действовать одновременно.

  Категории:Отладка ·

Функция: trace_options (f, option_1, ..., option_n)
Функция: trace_options (f)

  Устанавливает опции трассировки для функции 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);

  Категории:Отладка ·

Функция: untrace (f_1, ..., f_n)
Функция: untrace ()

  Отменяет трассировку функций f_1, ..., f_n, установленную ранее при помощи `trace`. Без аргументов, `untrace` отменяет трассировку всех функций.

  Функция `untrace` возвращает список функций, для которых была отменена трассировка.

  Категории:Отладка ·

Previous: Специальные команды, Up: Отладка [Contents][Index]