Вопрос

Мне нравится отлаживать в matlab с помощью команд.несколько вопросов:

  1. Если выбрать стек, возможно ли перейти к определенному стеку напрямую вместо перемещения одного стека за другим с помощью dbup и dbdown?
  2. После перехода к среднему стеку, если я выполняю некоторые команды, почему он автоматически возвращается к самому внутреннему стеку?Могу ли я оставаться в среднем стеке до тех пор, пока не дам команду перейти в другой стек?
Это было полезно?

Решение

1) Не с клавиатуры.Если вы используете редактор и у вас отображается панель инструментов редактора, то в выпадающем списке "Стек" отображается весь стек вызовов, и вы можете перейти на произвольный уровень.Возможно, вам удастся взломать n-уровневые dbup / dbdown вместе, посмотрев, что находится в этом раскрывающемся списке, но управление debugger очень сложно создать из 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>>.Вы не можете использовать отладчик для изменения потока управления выполняемым основным кодом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top