文章主要内容摘自《MATLAB 7.0从入门到精通》,求是科技编著。
程序错误一般分为两种:语法错误和逻辑错误。对于语法错误通常MATLAB会报错,并指出错误所在位置方便用户纠正。对于逻辑错误,往往需要用户对程序进行调试,发现错误原因和位置。MATLAB下的程序调试方法主要有直接调试法和工具调试法。
(1)直接调试法
1.通过分析后,将重点怀疑语句后的分号删掉,将结果显示出来,然后与预期值进行比较。
2.单步调试一个函数时,将第一行的函数声明注释掉,并定义输入变量的值,然后以脚本方式运行此M文件,这样就可保存下原来的中间变量了,可以对这些结果进行分析,找出错误。
3. 可以在适当的位置添加变量输出值的语句。
4.在程序的适当位置添加keyboard指令。当MATLAB执行到此处时将暂停,并显示k>>提示符,用户可以查看或改变各个工作空间中存放的变量,在提示符后键入return指令可以继续执行原文件。
(2)工具调试法
MATLAB的工具调试法主要包括以命令行为主的程序调试和以图形界面为主的程序调试。
2.1 以命令行为主的程序调试
1. 设置断点
dpstop in mfile
在文件名为mfile的M文件的第一个可执行语句前设置断点。
dbstop in mfile at lineno
在文件名为mfile的M文件的第lineno行设置断点。
dpstop in mile at subfun
当程序执行到子函数subfun时,暂时停止文件的执行并使MATLAB处于调试模式。
dbstop if error
M文件运行遇到错误时,终止M文件的运行并使得MATLAB处于调试状态。不包括try…catch语句中检测到的错误。
dbstop if all error
遇到任何类型的运行错误均停止运行并处于调试状态
dbstop if warning
运行M文件遇到警告时,终止M文件的运行并使得MATLAB处于调试状态,运行将在产生警告的行停止,程序可恢复运行
dbstop if caught error
当try…catch检测到运行时间错误时,停止M文件的执行,用户可以恢复程序的运行
dbstop if naninf或dbstop ifinfnan
当遇到无穷值或非数值时,终止M文件的执行
2.清除断点
dbclear all
dbclear all in mfile
dbclear in mfile
dbclear in mfile at lineno
dbclear in mfile at subfun
dbclear if error
dbclear if warning
dbclear if naninf
dbclear if infnan
3. 恢复执行
dbcont
从断点处恢复程序的执行
4. 调用堆栈
dbstack
此命令显示M文件名和断点产生的行号,调用此M文件的名称和行号等,知道最高级M文件函数,即列出了函数调用的堆栈。
[ST, I]=dbstack
dbstack(N)
此命令省略显示中的前N个帧
dbstack(‘-completenames’)
此命令输出堆栈中的每个函数的全名,即函数文件的名称和在堆栈中函数包含的关系
5. 列出所有断点
dbstatus
此命令列出所有的断点,包括错误、警告、nan和inf等
dbstatus mfile
此命令列出指定的M文件的所有断点设置。
6. 执行1行或多行语句
dbstep
执行当前M 文件下一个可执行语句。
dbstep nlines
执行下nlines 行可执行语句。
dbstep in
当执行下一个可执行语句时,如果其中包含对另外一个函数的调用,此命令将从被调用的函数文件的第一个可执行语句执行。
dbstep out
此命令将执行函数剩余的部分,在离开函数时停止。
这4种形式的语句执行完后,都返回调试模式,如果在执行过程中遇到断点,程序将中止。
7. 列出文件内容
dbtype mfile
列出mfile文件的内容,并在每行语句前面加上标号以方便使用者设定断点。
dbtype mfile start:end
列出mfile文件中指定行号范围的部分。在UNIX和VMS调试模式下,并不显示MATLAB 的调试器,此时必须使用dbtype来显示源程序代码。
8. 切换工作空间
dbdown
遇到断点时,将当前工作空间切换到被调用的M文件的空间。
dbup
将当前工作空间(断点处)切换到调用M文件的工作空间。两个命令常常配合使用。
9. 退出调试模式
dbquit
立即结束调试器并返回到基本工作空间,所有断点仍有效。
2.2 以图形界面为主的程序调试
新建一个M 文件,即可打开编译器,选择主菜单中“Debug”选项,打开下拉菜单,有
各种调试命令:
step
单步执行,快捷键为F10,与调试命令中的dbstep相对应。
step in
深入被调函数,快捷键为F11,与调试命令中的dbstep in相对应。
step out
跳出被调函数,快捷键为Shift+F11,与调试命令中的dbstep out 相对应。
run/continue
连续执行,快捷键为F5,与调试命令中的dbcont 相对应。
go until cursor
运行到鼠标所在的行,与dbstop in mfile at lineno 相对应。
set/clear breakpoint
设置或清除断点,快捷键为F12,与dbstop 和dbclear 相对应。
set/modify conditional breakpoint⋯
设置或者修改条件断点,单击此菜单项时,会弹出如图4-5 所示的对话框,要求用户对断点的条件作出设置,设置前光标在哪一行,则设置的断点就在这一行前。
enable/disable breakpoint
允许或者禁止断点的功用。
clear breakpoints in all files
清除所有断点,与dbclear all 相对应。
stop if errors/warnings
与dbstop if error、dbstop if all error、dbstop if warning、dbstop if caught error、dbstop if naninf
和dbstop if infnan 等命令等价。
exit debug mode
退出调试模式,与dbquit相对应。
只有当文件进入调试状态时,上述命令才会全部处于使能态。