在退出文件后启动MATLAB调试模式

时间:2016-04-04 08:21:41

标签: matlab debugging

我经常发现自己处于这种情况,我在代码中插入了很多keyboard命令来调试它。但是,我希望有更多的灵活性。这就是我开始编写stahp函数的原因。

function stahp()
disp('Stahp requested.');
dbstack
disp('You can either');
disp('  1 abort.');
disp('  2 continue.');
disp('  3 debug.');

in = input('Choose what to do:\n');

switch(in)
    case 1
        error('Stahp.');
    case 2
        disp('Continue.')
    case 3
        disp('Debug.');
        keyboard % <------------------------------------ Here is my problem
    otherwise
        stahp();
end
end

这个想法是,让用户选择,他想做什么(继续,中止,调试,将来可能还有别的东西)。但是,我宁愿不在stahp函数内启动调试模式,而是在退出之后。 例如,运行时

function test_stahp
a = 1
stahp()
b = 2
end

我想在b=2之前进入调试模式。我假设,dbstep out可以以某种方式使用,但到目前为止我尝试的方式,你仍然需要手动退出stahp()。我也知道,stahp()otherwise的递归调用可能会使事情变得复杂,但我可以删除该部分。

非常感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用dbstack获取当前堆栈,然后检索调用函数的名称和调用stahp的行号。使用此信息,您可以使用dbstop在执行函数调用的函数中创建断点。下面的代码示例在b = 2行的test_stahp中设置断点。

function stahp()
disp('Stahp requested.');
dbstack
disp('You can either');
disp('  1 abort.');
disp('  2 continue.');
disp('  3 debug.');

in = input('Choose what to do:\n');
r=dbstack;
switch(in)
    case 1
        dbclear(r(2).name,num2str(r(2).line+1));
        error('Stahp.');
    case 2
        dbclear(r(2).name,num2str(r(2).line+1));
        disp('Continue.')
    case 3
        disp('Debug.');
        dbstop(r(2).name,num2str(r(2).line+1))
    otherwise
        stahp();
end
end