推断在Matlab调试会话中执行的下一个代码行

时间:2016-01-07 10:31:36

标签: matlab debugging

我正在编写一个界面来帮助我在linux上的控制台会话中调试Matlab代码(即没有GUI)。我使用tmux来分割屏幕,在左侧窗格中我运行Matlab,在右侧窗格中,脚本在Vim中打开。我调用dbstep2的自定义mex函数调用常规dbstep,还调用名为send_to_vim_via_tmux的matlab脚本,我在其中推断当前行,并向右窗格发送命令(通过tmux send-keys)突出显示将要执行的下一行代码,模仿使用GUI的调试会话。

由于我无法从Matlab dbstep脚本调用dbstep2.m(如果我这样做,它只是在dbstep2内停止,好像在那里设置了一个断点),我是从一个简单的mex文件只包含2行(dbstep2.c):

mexCallMATLAB(0, NULL, 0, NULL, "send_to_vim_via_tmux");
mexCallMATLAB(0, NULL, 0, NULL, "dbstep"); 

问题是,dbstep 的调用始终发生在,无论{C}源代码中放置mexCallMATLAB(0, NULL, 0, NULL, "dbstep");行。我猜这就是实现dbstep的方式。这意味着在我的send_to_vim_via_tmux脚本中,我必须推断要执行的 next 行。为了推断要突出显示的正确行,我使用Matlab的dbstack来获取当前行,然后我应用一些逻辑(添加1并可选择跳过空行或注释行等)。

我的问题在于while / for循环,其中end关键字我不知道循环是否会结束。例如:

[line 1] a = 1;     %'// debugger stops at this line, then I call dbstep2 
[line 2] b = 2;     %'// My script can infer line #1, so I highlight line 1+1=2
[line 3] for i = 1 : 10
[line 4]    b = b + i;
[line 5] end        %'// is next line 6 or 3 ???

有没有办法推断出将要执行的下一行,也许是一些未记录的魔法?唯一的另一个选择是解析正在调试的文件并分析条件 - 这对于简单的帮助工具来说似乎有些过分。

0 个答案:

没有答案