我喜欢使用命令在matlab中进行调试。一些问题:
答案 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>>的堆栈帧是什么。看着。您无法使用调试器来更改正在执行的主线代码的控制流。