相信在matlab调试程序的时候都遇到过这种情况:运行程序时命令行报错,而且出错的位置在我们自己定义的函数里,比如下面这个例子:
主函数main.m:
a=[1 2 3];
b=[4 5];
c=sum_squares(a,b);
子函数sum_squares.m
function c=sum_squares(a,b)
c=a.^2+b.^2;
end
我们运行主函数,显然会因为维度不匹配报错:
我举得例子非常简单,一眼就可以看出来问题在哪。但是如果变量很多,计算公式很复杂,我们也不知道具体是哪些变量维度不匹配,这时候一般的做法就是在子函数报错的对应行设置断点,重新运行主函数,再来找出具体问题。 如果程序运行时间比较长,一来二去这样就要消耗大量的时间。有没有啥简单的办法呢?当然是有的,在程序运行前加上dbstop if error,这样matlab就会在发生错误的位置暂停,直接可以省去第二次调试的步骤了。
dbstop if error
a=[1 2 3];
b=[4 5];
c=sum_squares(a,b);
把主函数改成这样,然后运行,直接就会在报错的代码行暂停,调试起来就很方便了:
dbstop函数还有其他的用法,具体可以查看官方文档:
dbstop
设置断点用于调试
语法
dbstop in file at location if expression
说明
dbstop in file
在 file
中的第一个可执行代码行位置设置断点。当您运行 file
时,MATLAB® 进入调试模式,在断点处暂停执行并显示暂停位置对应的行。
dbstop in file at location
在指定位置设置断点。MATLAB 执行会在到达该位置之前立即暂停,除非该位置处是一个匿名函数。如果该位置处是匿名函数,则执行将在断点之后立即暂停。
dbstop in file if expression
在文件的第一个可执行代码行位置设置条件断点。仅在 expression
的计算结果为 true (1)
时暂停执行。
dbstop in file at location if expression
在指定位置设置条件断点。仅在 expression
计算结果为 true 时,于该位置处或该位置前暂停执行。
dbstop if condition
在满足指定的 condition
(如 error
或 naninf
)的行位置处暂停执行。与其他断点不同,您不在特定文件中的特定行设置此断点。MATLAB 会在发生指定的 condition
时在任何文件的任何行暂停执行。
dbstop(b)
用于恢复您之前保存到 b
的断点。包含保存的断点的文件必须位于搜索路径中或当前文件夹中。MATLAB 按行号分配断点;因此,文件中的行数必须与保存断点时的行数相同。