Matlab 调试GNU倍频程:在dbup之后使用dbnext

Matlab 调试GNU倍频程:在dbup之后使用dbnext,matlab,debugging,octave,Matlab,Debugging,Octave,我使用的是GNUOctave 3.6.4。根据报告: 使用在调用堆栈上下移动 dbup和dbdown现在可以工作了 但是,当我处于调试模式,并执行dbup后接dbnext时,将执行下一帧中的下一行。为什么会这样?如何避免 octave -q octave:1> myfunc_base(2,3) stopped in /home/seb/octave/myfunc.m at line 5 5: keyboard debug> dbstack stopped in:

我使用的是GNUOctave 3.6.4。根据报告:

使用在调用堆栈上下移动 dbup和dbdown现在可以工作了

但是,当我处于调试模式,并执行
dbup
后接
dbnext
时,将执行下一帧中的下一行。为什么会这样?如何避免

octave -q
 octave:1> myfunc_base(2,3)
 stopped in /home/seb/octave/myfunc.m at line 5
 5:   keyboard
 debug> dbstack
 stopped in:
   -->      myfunc at line 5 [/home/seb/octave/myfunc.m]
            myfunc_base at line 4 [/home/seb/octave/myfunc_base.m]
 debug> dbup
 stopped in myfunc_base at line 4 % <-- looks good!
 debug> dbnext
 stopped in /home/seb/octave/myfunc.m at line 6 % <-- damn this is the old frame!
 6:   sp = a + temp;
 debug> 
myfunc\u base.m

function sp = myfunc_base (aa, bb)

  temp = myfunc(aa, aa, bb);
  sp = aa + temp;

end 

要退出,您必须使用
dbstep out
。这与matlab的行为相匹配,其他一切都会非常奇怪。如果发生异常,则无法在堆栈的任何级别上跳转到下一行。

要跳出,必须使用
dbstep out
。这与matlab的行为相匹配,其他一切都会非常奇怪。如果发生异常,则不能在堆栈的任何级别上跳转到下一行。

ohhh。似乎我误解了
dbup
。我认为
dbup
相当于gdb的
finish
。我会测试一下,然后回来。顺便说一句,我不明白你的最后一句话,你能澄清一下吗?假设a()调用b(),b()调用c()。您的行是c语言,使用dbup、dbcont。在c()的剩余行中抛出异常,如果捕获到异常,将跳转到何处?b中没有执行的下一行。也许可以以某种方式实现,但这样的行为会让人非常困惑。似乎我误解了
dbup
。我认为
dbup
相当于gdb的
finish
。我会测试一下,然后回来。顺便说一句,我不明白你的最后一句话,你能澄清一下吗?假设a()调用b(),b()调用c()。您的行是c语言,使用dbup、dbcont。在c()的剩余行中抛出异常,如果捕获到异常,将跳转到何处?b中没有执行的下一行。可能会以某种方式实现,但这样的行为将非常混乱。
function sp = myfunc_base (aa, bb)

  temp = myfunc(aa, aa, bb);
  sp = aa + temp;

end