MATLAB下的程序调试

文章主要内容摘自《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相对应。

只有当文件进入调试状态时,上述命令才会全部处于使能态。

你可能感兴趣的:(Matlab)