如果出现错误,请保持Matlab在dbstop期间不要插入内置函数

Eva*_*van 8 debugging matlab

dbstop error在Matlab工作时我经常使用.的时间的好部分,一个错误导致引发错误内部内置[M-文件]的功能,然后使Matlab来停止执行并打开文件的.但是,调试内置文件内部几乎没有任何帮助,因此最终会破坏我的工作流程.可能有一种方法来设置,以便Matlab退出调试器中的内置文件(从不打开它),让我在函数调用?

Eva*_*van 0

根据Rody 的回答和 Mathworks 的反馈,这是您目前可以获得的最接近的结果 (R2016b):

S = dbstack('-completenames');

builtins    = ~cellfun('isempty', strfind({S(:).file}, matlabroot()));
stack_depth = find(~builtins, 1, 'first');

hDocument = matlab.desktop.editor.findOpenDocument(S(1).file);
matlab.desktop.editor.openAndGoToLine(S(stack_depth).file,S(stack_depth).line);
hDocument.close();

if stack_depth == 2
    dbup();
end
Run Code Online (Sandbox Code Playgroud)

该快捷方式将:

  1. 打开距离正确行最近的用户函数。
  2. 关闭引发错误时打开的内置函数。
  3. 如果错误发生在距用户功能仅一级的位置,请切换到该工作区。

问题是 dbup() 只工作一次 - 调用后,脚本中的执行停止。没有函数可以切换到堆栈中的任意位置。