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().