写在前面,最简单粗暴高效的调试方法就是在出错行之前,程序的小节开始处,放一个 ‘dbstop if error’,如果错误出在子程序里,该条语句也要相应放到子程序中
调试的基本任务
语法错误:由于程序员疏忽、输入不正确等原因而造成的代码违背程序语言规则的错误。
运行错误:由于对所求解问题的理解差异,导致程序流程出错或对程序本身的特性认识有误而造成的程序执行结果错误的情况。
异常:程序执行过程中由于不满足条件而造成的程序执行错误。
调试工具
dbstop – Set breakpoint %设置断点
dbclear – Remove breakpoint %清除断点
dbcont – Resume execution %重新执行
dbdown – Change local workspace context %下移本地工作空间内容
dbmex – Enable MEX-file debugging %使MEX文件调试有效
dbstack – List who called whom %列出函数调用关系
dbstatus – List all breakpoints %列出所有断点
dbstep – Execute one or more lines %单步或多步执行
dbtype – List M-file with line numbers %列出M文件
dbup – Change local workspace context %上移本地工作空间内容
dbquit – Quit debug mode %退出调试模式
这些调试函数都有相应的图形化调试工具,使得程序的调试更加方便、快捷。这些图形化调试工具在MATLAB编译器的”debug”和”Breakpoints”菜单中,以方便调试使用。
快捷键
F12:语句设置断点
F5 : 运行到断点处
F10:与VS中一样,单步调试
F11:进入函数体
Shift+F5: 退出调试模式
设置断点
通常可以在任何想调试的位置放置相关的dbstop 来开始调试模式,但切记调试完成后要退出。
% 在文件名为mfile的M文件第一个可执行语句前设断点
dbstop in mfile
% 在mfile的第linenum行设断点
dbstop in mfile at linenum
% 当程序执行到子函数subfun时,暂时中止执行,并在子函数的第一个可执行语句前设断点
dbstop in mfile at subfun
eg: dbstop in mfile>subfun
% 遇到错误时,终止M文件运行,并停在错误行(不包括try...catch语句中检测到的的错误,不能在错误后重新开始运行)
dbstop if error
% 遇到任何类型错误均停止(包括try...catch语句中检测到的的错误)
dbstop if all error
二、列出文件内容
% 列出mfile文件的内容,并在每行语句前加上行号以方便使用者设定断点
dbtype mfile
% 列出mfile文件中指定行号范围的部分
dbtype mfile start:end
三、执行一行或多行语句
% 执行下一个可执行语句
dbstep
% 执行下nlines行可执行语句
dbstep nlines
% 执行下一行可执行语句,如有子函数,进入
dbstep in
% 执行函数剩余部分,离开函数时停止
dbstep out
四、恢复运行
% 从断点处恢复程序的执行,直到下一个断点或错误后返回Matlab基本工作空间
dbcont
五、列出所有断点
% 返回所有M文件中的断点设置
dbstatus
% 列出指定M文件中所有断点设置,mfile必须为M文件函数或有效路径
dbstatus mfile
六、断点清除
% 清除所有M文件中的所有断点
dbclear all
% 清除文件名为mfile的文件中的所有断点
dbclear all in mfile
% 清除文件名为mfile中第一个可执行语句前的断点
dbclear in mfile
% 清除文件名为mfile中第linenu行的断点
dbclear in mfile at linenu
% 清除文件名为mfile中子函数subfun前的断点
dbclear in mfile at subfun
七、退出调试模式
% 退出调试
dbquit