prog
::trace
Наблюдайте функции
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.
prog::trace(obj
, <Recursive = FALSE
>) prog::trace({obj1, obj2, …}
, <Recursive = FALSE
>) prog::trace(options
)
prog::trace(obj)
управляет объектом obj
MuPAD® наблюдать ввод и выход из этого объекта.
prog::trace
имеет новый синтаксис и новый набор опций. Старый синтаксис был удален.
prog::trace
позволяет вам наблюдать функции, области, доменные методы и функциональные среды. Используйте prog::trace
функция для отладки. Смотрите Пример 1.
prog::trace
позволяет вам задать набор функций, областей, методов или функциональных сред, которые вы хотите наблюдать. Смотрите Пример 2.
prog::trace
позволяет вам наблюдать отношения между вызовами прослеженных объектов.
Прослеживать объект obj
, используйте вызов функции prog::trace(obj)
. После того вызова каждый раз вызов функции вводит или выходит из объекта obj
, MuPAD распечатывает сообщение и возвращает аргументы и возвращаемое значение того вызова. Смотрите Пример 3.
prog::trace
позволяет вам наблюдать область или функциональную среду. Когда вы вызываете prog::trace
функция для области, функция наблюдает все методы области. Когда вы вызываете prog::trace
для функциональной среды это наблюдает все пазы функциональной среды. Чтобы проследить только конкретные методы (пазы), обеспечьте набор этих методов (пазы). Смотрите slot
страница справки для получения дополнительной информации. Смотрите Пример 8.
Чтобы предотвратить трассировку всех пазов функциональной среды, установите значение Recursive
опция к FALSE
. Смотрите пример 7.
Функциональный prog::untrace(obj)
отключает трассировку объекта obj
. Здесь obj
функция, набор функций, области, доменного метода или функциональной среды. Функциональный prog::traced
обнаруживает, прослеживает ли система в настоящее время конкретный объект.
Задайте функциональный f
, и наблюдайте эту функцию:
f := x -> if x > 0 then x else -f(-x) end: prog::trace(f): f(-2)
enter f(-2) enter f(2) computed 2 computed -2
Измените функцию и повторно присвойте новую функцию f
. Несмотря на то, что вы используете то же имя функции (f
), MuPAD не прослеживает новую функцию:
f := x -> if x > 0 then x else f(-x) end: f(-2)
Чтобы проследить новую функцию, вызовите prog::trace
снова. Теперь механизм трассировки наблюдает обновленную функцию:
prog::trace(f): f(-2)
enter f(-2) enter f(2) computed 2 computed 2
Для дальнейших расчетов остановите наблюдение за функцией:
prog::untrace(f)
Если вы хотите проследить больше чем одну функцию, используйте набор, чтобы задать эти функции в одном вызове функции:
prog::trace({sin, cos, exp}): sin(5*PI/2); cos(5*PI); exp(5)
enter sin((5*PI)/2) enter sin(PI/2) remembered 1 computed 1
enter cos(5*PI) enter cos(PI) remembered -1 computed -1
enter exp(5) computed exp(5)
Чтобы остановить наблюдение за всеми функциями, используйте prog::untrace
без аргументов:
prog::untrace()
Задайте короткую функцию, которая вызывает себя рекурсивно, и наблюдайте вызовы:
fib:= proc(n) begin if n < 2 then n else fib(n - 1) + fib(n - 2) end_if end_proc: prog::trace(fib): fib(3)
enter fib(3) enter fib(2) enter fib(1) computed 1 enter fib(0) computed 0 computed 1 enter fib(1) computed 1 computed 2
Ограничить количество вызовов вложенной функции, отображенных prog::trace
, используйте Depth
опция. Задавать значение Depth
, используйте отдельный prog::trace
вызов функции:
prog::trace(fib): prog::trace(Depth = 2); fib(12)
enter fib(12) enter fib(11) computed 89 enter fib(10) computed 55 computed 144
Depth
опция независима от fib
процедура. Теперь, если вы используете prog::trace
прослеживать любую другую процедуру, prog::trace
отображает вложенные вызовы той процедуры с помощью Depth = 2
. Удалите эту глобальную опцию для дальнейших расчетов:
prog::untrace(fib): prog::trace(Depth = 0)
Чтобы отобразить использование памяти, используйте Mem
опция:
prog::trace(Mem): prog::trace(sin): sin(3/2*PI)
enter remember::sin((3*PI)/2) [mem: 3267052] enter remember::sin(PI/2) [mem: 4033596] remembered 1 [mem: 4033436] computed -1 [mem: 4033072] -1
Mem
опция независима от прослеженной процедуры. Теперь, если вы используете prog::trace
прослеживать любую другую процедуру, prog::trace
использование памяти отображений на каждом шаге той процедуры. Удалите эту глобальную опцию для дальнейших расчетов::
prog::untrace(sin): prog::trace(Mem = FALSE)
NoArgs
опция подавляет выход аргументов прослеженных объектов:
prog::trace(linalg): prog::trace(NoArgs); linalg::eigenvalues(matrix([[1, 0, 0], [0, -1, 2], [0, 1, 1]]))
enter linalg::eigenvalues enter linalg::checkForFloats return enter linalg::charpoly enter linalg::charpolyBerkowitz return return return
NoArgs
опция независима от прослеженной процедуры. Теперь, если вы используете prog::trace
прослеживать любую другую процедуру, prog::trace
скрывает аргументы на каждом шаге той процедуры. Удалите эту глобальную опцию для дальнейших расчетов:
prog::untrace(linalg): prog::trace(NoArgs = FALSE)
Если вы используете Parent
опция, prog::trace
показывает имя процедуры, которая вызывает прослеженный объект:
prog::trace(cos): prog::trace(Parent): f := x -> cos(2*x): g := (x, y) -> f(x) + f(y): g(3/2*PI, -3/2*PI)
enter cos(3*PI) (called from f) enter cos(PI) (called from cos) remembered -1 computed -1 enter cos(-3*PI) (called from f) enter cos(3*PI) (called from cos) remembered -1 computed -1
prog::trace(f): prog::trace(g): g(-PI, PI)
enter g(-PI, PI) enter f(-PI) (called from g) enter cos(-2*PI) (called from f) enter cos(2*PI) (called from cos) enter cos(0) (called from cos) remembered 1 computed 1 computed 1 computed 1 enter f(PI) (called from g) enter cos(2*PI) (called from f) remembered 1 computed 1 computed 2
Parent
опция независима от прослеженных процедур. Теперь, если вы используете prog::trace
прослеживать любой другой объект, prog::trace
показывает отношения между вызовами прослеженных объектов. Удалите эту глобальную опцию для дальнейших расчетов:
prog::untrace(cos): prog::trace(Parent = FALSE)
По умолчанию, prog::trace
функционируйте прослеживает все пазы функциональной среды. Например, проследите besselJ
функционируйте и наблюдайте следующий вызов функции:
prog::trace(besselJ); besselJ(1, 2.3)
enter besselJ(1, 2.3) enter besselJ::float(1, 2.3) computed 0.5398725326 computed 0.5398725326
Чтобы не использовать трассировку всех пазов, установите значение Recursive
опция к FALSE
:
prog::untrace(besselJ); prog::trace(besselJ, Recursive=FALSE); besselJ(1, 4.5)
enter besselJ(1, 4.5) computed -0.2310604319
Для дальнейших расчетов остановите наблюдение за besselJ
функция:
prog::untrace(besselJ)
Можно проследить области и доменные методы. Например, создайте следующую маленькую область:
T := newDomain("T"): T::new := proc(h, m = 0) name T; begin new(T, h*60 + m) end: T::intern := x -> [op(x) div 60, op(x) mod 60]: T::print := x -> expr2text(T::intern(x)[1]).":". substring(expr2text(100 + T::intern(x)[2]), 2, 2): T::_plus := () -> new(T, _plus(map(args(), op))): T::expr := op: T::_mult := () -> new(T, _mult(map(args(), expr))): prog::trace(T): T(1, 30) + T(0, 45)*T(1, 05)
enter T(1, 30) computed 1:30 enter T(0, 45) computed 0:45 enter T(1, 5) computed 1:05 enter T::_mult(0:45, 1:05) computed 48:45 enter T::_plus(1:30, 48:45) computed 50:15
MuPAD не прослеживает процесс отображения прослеженных выводов. Поэтому T::intern
и T::print
методы не появляются в прослеженных выходных параметрах.
Теперь проследите арифметические методы только. При определении методов, чтобы проследить, используйте их имена паза, такие как slot(T, "_plus")
или T::_plus
:
prog::untrace(): prog::trace({T::_plus, T::_mult}): T(1, 30) + T(0, 45)*T(1, 05)
enter T::_mult(0:45, 1:05) computed 48:45 enter T::_plus(1:30, 48:45) computed 50:15
prog::untrace():
|
Функция MuPAD, область, метод или функциональная среда, чтобы наблюдать. Задайте методы их |
|
Набор функций MuPAD, областей, методов или функциональных сред, чтобы наблюдать. |
|
Опция, заданная как Отобразите вызовы вложенной функции только до глубины рекурсии |
|
Покажите текущее использование памяти. После того, как вы установите эту опцию, все новые и регенерированные выходные параметры для прослеженных объектов показывают информацию о текущем использовании памяти. Смотрите Пример 4. |
|
Не показывайте аргументы вызовов прослеженных объектов и возвращенных значений. Без этой опции все выходные параметры для прослеженных объектов показывают аргументы и возвращенные значения для каждого вызова прослеженного объекта. Смотрите Пример 5. |
|
Покажите имя процедуры, которая вызывает прослеженный объект. После того, как вы устанавливаете эту опцию, все новые и регенерированные выходные параметры для прослеженных объектов показывают имена процедур, которые вызывают прослеженные объекты. Смотрите Пример 6. |
|
Опция, заданная как Не прослеживайте все пазы функциональной среды или области. По умолчанию, |
prog::trace
возвращает пустой объект null()
.