在Matlab中使用递归算法的更详细的错误消息?

时间:2013-08-20 19:47:25

标签: matlab recursion error-handling cell-array verbosity

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

我无法理解为什么有时会将Matlab结果重新发送到更详细的错误消息中,以帮助我实际解决问题。现在我试图找到一个让Matlab显示尽可能多的信息的命令。例如,下面的索引超尺寸误差对于我的递归算法来说是完全没用的 - 这是Matlab曾经显示特定线的特定算法,但现在由于某种原因只是空洞地告诉算法的名称

Index exceeds matrix dimensions.

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

你可以看到我在运行算法Dij的行上运行算法Dij失败了。

如何获取有关错误的更多信息?或者我怎样才能进入递归算法的任何一点? -Linebreak并尝试进入该点只会触发错误。

3 个答案:

答案 0 :(得分:0)

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

当递归函数继续时,您可以使用keyboard matlab函数检查matlab工作区。您可以选择在错误消息之前添加它,因此每次在递归级别更深入时都会调用它,以便您可以检查发生了什么,或者可以在发生错误时添加它(在{ {1}})。

这只是草稿,它可能包含错误,使其适应您的需求:

catch

答案 1 :(得分:0)

在运行代码之前运行dbstop if error,以便在错误点完全退回到调试器。从那里你可以检查变量,包括你携带的任何变量到ID级别。您还可以运行dbstack以查看完整的调用堆栈。

答案 2 :(得分:0)

在描述中没有明显的错误是因为它没有显示我编写底层函数的工具:我使用了cellarrays,由于某些原因,Matlab返回的更糟糕的错误信息是使用cellarray而不是矩阵,所以:

  
    

我的真正建议是避免使用cellarrays并使用矩阵 - 如果你需要使用大量的零例,请使用现成的稀疏功能,因为它们具有更好的调试详细程度!

  

不要浪费太多时间进行调试,而是选择合适的工具,Matlab非常适合矩阵,您可以在错误消息的质量中看到它。