如果错误发生,请在dbstop期间让Matlab逐步进入内置函数
在Matlab中工作时,我使用了很多dbstop error
。 很大一部分时间,错误会导致内置[m文件]函数引发错误,然后导致Matlab停止执行并打开文件。 但是,对内置文件进行调试几乎毫无帮助,因此最终会中断我的工作流程。 可能有一种方法来设置,使Matlab退出调试器的内置文件(从不打开它),让我在函数调用?
尽管我从来没有找到正确解决这个问题的方法,但解决这个问题的方法相当简单:
创建一个包含以下内容的脚本:
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
将它保存在某个对您有意义的地方,并在MATLAB工具栏中放置一个快捷方式。
然后,每当发生此问题时,只需单击您的小快捷方式,它将自动将您带到调试堆栈中的第一个非内建函数。
根据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
这个快捷方式将:
问题是dbup()只能工作一次 - 在调用之后,脚本中的执行停止。 没有功能切换到堆栈中的任意位置。
链接地址: http://www.djcxy.com/p/94709.html上一篇: Keep Matlab from stepping into built in functions during dbstop if error
下一篇: Custom NSURLProtocol slower after switching NSURLConnection to NSURLSession