在Matlab工作时,我经常使用dbstop error
。很大一部分时间,一个错误导致错误被抛出内置的[m-file]函数内部,然后导致Matlab停止执行并打开文件。但是,调试内置文件内部几乎没有任何帮助,因此最终会破坏我的工作流程。可能有办法设置,以便Matlab退出调试器中的内置文件(从不打开它),让我在函数调用中?
答案 0 :(得分:4)
虽然我从来没有找到解决此问题正确的方法,但是很容易将解决方法整合在一起:
创建一个包含以下内容的脚本:
S = dbstack();
file_paths = cellfun(@which, {S.file}, 'UniformOutput', false);
builtins = ~cellfun('isempty', strfind(file_paths, matlabroot()));
stack_depth = find(~builtins, 1, 'first');
for ii = 1:stack_depth-1
dbup(); end
将它保存在对您有意义的地方,然后放置shortcut to it in the MATLAB toolbar。
然后,每当出现此问题时,您只需单击您的小快捷方式,它将自动转到调试堆栈中的第一个非内置函数。
答案 1 :(得分:0)
基于来自Mathworks的Rody's答案和反馈,这是您在此时可以获得的最接近的结果(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
此快捷方式将:
问题是dbup()只能运行一次 - 在调用之后,脚本中的执行会停止。没有功能可以切换到堆栈中的任意位置。