相信在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
dbstop in file at location
dbstop in file if expression
dbstop in file at location if expression
dbstop if condition
dbstop(b)
说明
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 按行号分配断点;因此,文件中的行数必须与保存断点时的行数相同。
dbstop官方使用文档