Отладьте код MuPAD в режиме трассировки

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.

MuPAD® обеспечивает две альтернативы для отладки вашего кода. Во-первых, можно использовать отладчик графический интерфейса пользователя MuPAD, чтобы отладить код в интерактивном режиме, наблюдая подписание кода шаг за шагом. Другая альтернатива должна сгенерировать отчет, показывающий шаги, которые были сделаны при выполнении кода. Режим, в котором MuPAD генерирует отчет при выполнении процедуры, области, метода или функциональной среды, называется режимом трассировки. Этот режим полезен для многоступенчатых процедур, которые требуют, чтобы долгое время выполнилось. Используйте этот подход, чтобы отладить конкретную процедуру, область, метод или функциональную среду, для которой вы хотите распечатать отчет.

При отладке также можно использовать print и функции fprint для печати промежуточных результатов, приведенных кодом.

Предположим, вы хотите создать процедуру, которая вычисляет числа Лукаса. Числа Лукаса являются последовательностью целых чисел. Формула рекурсии, которая задает n th номер Лукаса, подобна определению Чисел Фибоначчи:

Несмотря на то, что MuPAD не обеспечивает функцию, которая вычисляет числа Лукаса, пишущий, что ваша собственная процедура для этой задачи легка:

lucas:= proc(n:Type::PosInt)
begin
  if n = 1 then
    1
  elif n = 2 then
    3
  else
    lucas(n - 1) + lucas(n - 2)
  end_if
end_proc:

Вызов процедуры lucas(n) возвращает n th номер Лукаса. Например, отобразите первые 10 чисел Лукаса:

lucas(n) $ n = 1..10

Предположим, что вы хотите проследить эту процедуру. Чтобы переключить осуществление конкретной процедуры, области, метод или функциональная среда к режиму трассировки, использует функцию prog::trace. Например, чтобы проследить процедуру lucas, введите:

prog::trace(lucas):

Теперь, если вы вызываете процедуру lucas, механизм трассировки наблюдает каждый шаг вызова процедуры и генерирует отчет для того вызова:

lucas(5)
enter lucas(5)
  enter lucas(4)
    enter lucas(3)
      enter lucas(2)
      computed 3
      enter lucas(1)
      computed 1
    computed 4
    enter lucas(2)
    computed 3
  computed 7
  enter lucas(3)
    enter lucas(2)
    computed 3
    enter lucas(1)
    computed 1
  computed 4
computed 11

Вызов функции prog::traced() возвращает имена всех в настоящее время прослеженных процедур, областей, методов и функциональных сред:

prog::traced()

При помощи различных вариантов функции prog::trace можно настроить сгенерированные отчеты. Большинство этих опций независимо от конкретного вызова процедуры. Они влияют на все отчеты, сгенерированные после того, как вы будете использовать опцию. Дополнительную информацию см. в странице справки prog::trace.

Если процедура использует много вложенных вызовов процедуры, сгенерированный отчет для той процедуры может быть очень длинным. Чтобы ограничить количество вложенных вызовов процедуры в отчете, используйте опцию Depth prog::trace:

prog::trace(Depth = 2):
lucas(5)
enter lucas(5)
  enter lucas(4)
  computed 7
  enter lucas(3)
  computed 4
computed 11

Опция Depth влияет на все отчеты, сгенерированные для дальнейших вызовов процедур, областей, методов и функциональных сред. Если вы не хотите использовать эту опцию для дальнейших вызовов, установите ее значение к 0. Значение 0 указывает, что prog::trace должен отобразить все вложенные вызовы:

prog::trace(Depth = 0):

Чтобы отобразить использование памяти на каждом шаге вызова процедуры, используйте опцию Mem:

prog::trace(Mem):
lucas(5)
enter lucas(5) [mem: 5636064]
  enter lucas(4) [mem: 5636544]
    enter lucas(3) [mem: 5636944]
      enter lucas(2) [mem: 5637344]
      computed 3 [mem: 5637060]
      enter lucas(1) [mem: 5637424]
      computed 1 [mem: 5637140]
    computed 4 [mem: 5636756]
    enter lucas(2) [mem: 5637120]
    computed 3 [mem: 5636836]
  computed 7 [mem: 5636356]
  enter lucas(3) [mem: 5636720]
    enter lucas(2) [mem: 5637120]
    computed 3 [mem: 5636836]
    enter lucas(1) [mem: 5637200]
    computed 1 [mem: 5636916]
  computed 4 [mem: 5636532]
computed 11 [mem: 5636052]

Чтобы прекратить использовать опцию Mem для дальнейших вызовов, установите ее значение к FALSE:

prog::trace(Mem = FALSE):

Чтобы прекратить прослеживать вызовы процедуры lucas, используйте функцию prog::untrace:

prog::untrace():