如果错误发生,请在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