matlab - 在Matlab中使用递归算法获得更多详细错误消息吗?

标签 matlab recursion error-handling cell-array verbosity

错误:我在底层函数中使用了单元数组,不好!

我不明白为什么有时重新启动Matlab会导致产生更详细的错误消息,从而帮助我真正解决问题。现在,我试图找到一个使Matlab显示尽可能多的信息的命令。例如,下面的索引超出维的错误对于我的递归算法完全没有用-这是Matlab曾经揭示过特定行的特定算法,但是由于某种原因,现在只能空虚地告诉算法名称

Index exceeds matrix dimensions.

Error in Dij (line 65)
        Dij_=Dij(ii,jj,[II,k],[r,q_(k)]);

在这里您可以看到我正在再次运行算法Dij的线上运行算法Dij。

如何获取有关该错误的更多信息?或者我如何进入递归算法的任何点? -Linebreak并试图进入该点只会引发错误。

最佳答案

在递归算法上添加一个try catch块,打印您认为有效的信息,然后抛出一个错误,该错误将以静默方式终止其他回调。

您可以使用keyboard matlab函数在递归函数继续进行时检查matlab工作区。您可以选择在错误消息之前添加它,以便在递归级别中每次深入时都将调用它,以便您可以检查发生了什么,或者可以在错误发生时添加它(在catch上) )。

这只是草稿,可能包含错误,请根据需要进行调整:

try
  % recursive routine
catch ext
  if strcmp(ext.identifier,'MyPackage:MyRecursiveRoutine:TerminateSilently'))
    % Do nothing
  else
    % Display useful information, you edit it to add information you think would be valid, i.e.:
    disp(ext.getReport)
    disp(yourVariable)
    % get dbstack size, to see how many recursive functions, i.e:
    theStack = dbstack;
    recursiveCalls=sum(strcmp({theStack.name},'MyRecursiveFcnName'))
    % You may even add the keyboard function here, so that you can inspect your workspace:
    keyboard
    throw(MExcept('MyPackage:MyRecursiveRoutine:TerminateSilently',''));
  end
end

关于matlab - 在Matlab中使用递归算法获得更多详细错误消息吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18343801/

相关文章:

java - 贾克斯-RS : Getting error message from REST call?

c++ - Matlab 与外部应用程序(C++)之间的通信

c# - 从 MATLAB 发布 .NET 程序集

matlab - 如何计算矩阵中给定值的元素数量?

java - 查找字符串中大写字母出现次数的递归方法 - 使用辅助方法

algorithm - Prolog迷宫求解算法

python运行时错误,可以转储文件吗?

具有线性时间查找的字符串数组

java - 递归使用模块化算术解释java

java - 创建生态系统时出现处理错误