在matlab中调试

时间:2010-01-27 12:57:30

标签: matlab debugging

我喜欢使用命令在matlab中进行调试。一些问题:

  1. 如果选择堆栈,是否可以直接跳转到特定堆栈而不是使用dbup和dbdown移动一个堆栈?
  2. 跳转到中间堆栈后,如果我执行一些命令,为什么它会自动返回到最内层堆栈?我可以留在中间堆栈,直到我发出命令离开另一个堆栈吗?

1 个答案:

答案 0 :(得分:2)

1)不是来自键盘。如果您正在使用编辑器并显示编辑器工具栏,则会出现一个“堆栈”下拉列表,显示整个调用堆栈,您可以跳转到任意级别。您可以通过查看该下拉列表中的内容来一起破解n级dbup / dbdown,但由于调试器与您用于编写脚本的M代码的交互,调试器控件很难从Matlab编写脚本

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>>的堆栈帧是什么。看着。您无法使用调试器来更改正在执行的主线代码的控制流。