Matlab 调试GNU倍频程:在dbup之后使用dbnext
我使用的是GNUOctave 3.6.4。根据报告: 使用在调用堆栈上下移动 dbup和dbdown现在可以工作了 但是,当我处于调试模式,并执行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:
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