отладка в Matlab - PullRequest
       14

отладка в Matlab

0 голосов
/ 27 января 2010

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

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

1 Ответ

2 голосов
/ 27 января 2010

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 >>. Вы не можете использовать отладчик для изменения потока управления выполняемого основного кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...