错误:我在底层函数中使用了单元数组,不好!
我不明白为什么有时重新启动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/