1) Не с клавиатуры. Если вы используете редактор и на панели инструментов редактора отображается, есть раскрывающийся список «Стек», который показывает весь стек вызовов, и вы можете перейти на произвольный уровень. Возможно, вы сможете взломать n-уровень dbup / dbdown вместе, посмотрев, что в этом выпадающем списке, но управление отладчиком очень сложно для сценария из Matlab из-за взаимодействия отладчика и M-кода, который вы используете для сценариев .
2) Если вы запускаете команду из командной строки отладчика «K >>», то после ее завершения она должна вернуть вам уровень стека, с которого вы ее выполнили, как вы ожидаете. У вас все еще установлена точка останова на нижнем уровне кода? Возможно, вы на самом деле видите подсказку вторичного отладчика «K >>» из точки останова во вложенном стеке вызовов. По сути, вы можете иметь несколько вложенных контекстов отладчика.
Например:
function f1
f2();
function f2()
f3();
function f3()
f4();
function f4()
disp('Hello world');
Если вы добавите его в отладчик таким образом, вы достигнете точки останова в нижней части стека вызовов, который сам был запущен из исходного сеанса отладчика.
>> dbstop in f1 at 8
>> f1()
8 disp('Hello world');
K>> dbup
In workspace belonging to f1>f3 at 6
K>> dbup
In workspace belonging to f1>f2 at 4
K>> f1()
8 disp('Hello world');
K>> dbstack
> In f1>f4 at 8
In f1>f3 at 6
In f1>f2 at 4
In f1 at 2
In f1>f4 at 8
In f1>f3 at 6
In f1>f2 at 4
In f1 at 2
K>>
Выполнение команды dbquit (выход из сеанса вложенного отладчика) возвращает вас к середине исходного стека вызовов, где вы остановились.
K>> dbquit
K>> dbstack
In f1>f4 at 8
In f1>f3 at 6
> In f1>f2 at 4
In f1 at 2
K>>
Если вы выводите dbcont из своего «K >>», тогда поток управления возобновляется с нижней части стека вызовов, где первоначально была установлена точка останова, независимо от того, на какой кадр стека смотрит K >>. Вы не можете использовать отладчик для изменения потока управления выполняемого основного кода.