MATLAB程序调试
程序调试是一个很基本也很重要的问题。人不是神,没有谁能一遍写出完全正确没有错误的程序。
错误的程序大致分为以下三类:
1 拼写错误:比如应该是sum(),写成了smu();这样的错误程序运行时会提示错误。
2 语法错误:比如6/0这样的就会造成错误;这样的程序不一定会报错,但是结果显示的完全不正常。
3 逻辑错误:这样的错误非常隐蔽,往往是对算法考虑不周全。程序可以顺利通过,显示的结果也是正常的数值,但是与先验的预期不符合。
那么:如何发现错误呢?
最简单的莫过于MATLAB直接告诉你哪行出错了,但是很多时候情况并不这么简单。
比如第35行出错了,但是出错的原因是因为上面几行的一些中间结果出错导致;或者程序根本没有报错,但是最后的结果不对。
这种时候就需要单步调试。
断点:
所谓断点,就是程序运行啊运行,运行到有断点的这一步会自动停住,方便你在中间环节调试,监督程序运行。
程序运行到当前断点:
步进:
在当前断点处查看变量:
STEP IN, 查看子函数运行情况:
子函数中的步进和跳出:
以上说的是MATLAB调试程序中最常用的方法。
此外再介绍一个函数:DBSTOP
在一般的情况下,MATLAB运行程序时遇到错误会自动停止运行。
而这个函数可以实现遇到错误时自动进入调试状态,停在当前出错行。
语法格式:
DBSTOP IF ERROR
当然还有很多其他格式,具体的就看MATLAB HELP吧。
第二篇:MATLAB程序调试和优化
程序调试和优化
一、 在Debugger窗口调试程序
用open打开M文件并进入Debugger窗口。
二、 设置断点
分为标准断点、条件断点和错误断点。
让断点不起作用或反之:Debug->Enable/Disable Breakpoint。
有效断点(红色)和无效断点(灰色):后者并非是不起作用的断点,程序运行到此照样停止,只是修改后没有保存而修改变成无效。
命令窗口处设置断点——dbstop函数,有两种形式,如下:
dbstop in mfile
dbstop in mfile at lineno
前者暂停在第一行可执行语句上,后者暂停在lineno行。它将函数置于debug方式,其后可用dbcont和dbstep重新运行,也可用dbquit退出debug方式。
清除断点:Debug->Set/Clear Breakpoint或dbclear函数(dbclear all/in mfile/in mfile at lineno)。
在命令窗口显示断点状况:dbstatus或dbstatus mfile。
设置条件断点:Debug->Set/Modify Conditional Breakpoint。
断点的弹出菜单:鼠标右键点击断点。
命令窗口设置条件断点:dbstop in mfile at lineno if expression。
错误断点:Debug->Stop if Errors/Warings。
命令窗口设置错误断点:dbstop if error或dbstop if error identifier或dbstop if warning或dbstop if warning identifier或dbstop if naninf。
清除错误断点:dbclear if error或dbclear if warning或dbclear if naninf或dbclear if error identifier或dbclear if caught error。
三、 交互地使用命令窗口和Debugger窗口
选中Debug->Open M-files when Debugging。
keyboard语句:观察和修改变量,并用return结束键盘方式并把控制再交给M文件。 在工作区上面的Stack中可以选择collatzplot函数,可以显示当前的变量及其值。 打开数组编辑器:双击变量,或用命令openvar variable。
who和whos:列出当前工作区的变量。
四、 彩色语法突出显示(Syntax highlighting),改正语法错误 可使用原本的颜色,也可自定义:File->Prefences->Colors Prefences。恢复默认颜色Restore Default Colors。
五、 利用错误信息
语法错误,带有下划线,可作为超链接。
六、 在MATLAB命令窗口进入Debug方式
dbstop - Set breakpoint.
dbclear
dbcont dbdown dbmex dbstack - Remove breakpoint. - Resume execution. - Change local workspace context. - Enable MEX-file debugging. - List who called whom.
- List all breakpoints.
- Execute one or more lines.
- List M-file with line numbers.
- Change local workspace context.
- Quit debug mode. dbstatus dbstep dbtype dbup dbquit
七、 Cells
Cell
工具条:,从左到右依次是执行当前Cell;执行当前Cell并推进到下一个Cell;执行整个文件;减少或增加光标附近的数值,并运行;除或乘光标附近的数,并运行;插入Cell定界符;显示Cell标题。
Cell是指在Editor/Debugger窗口中把一个M文件分解成的若干段。独立cell可以单独运行。
激活Cell方式:Cell->Enable Cell Mode。
定义Cell:Cell->Insert Cell Divider/Break。
给Cell加标题:Cell->Insert Text Markup->Cell Title。
下一个Cell:Cell->Next Cell。
上一个Cell:Cell->Previous Cell。
运行一个Cell:Cell->Evaluate Current Cell或点击响应的图标。
八、 M-Lint
M-lint能帮助验证代码的完整性。进入方式:mlint函数;M-Lint的图形用户界面(GUI)。 进入方式:在Current Directory中单击M-lint Code Check Report;或者在Editor窗口选择Tools->Check Code with M-Lint。
命令窗口:mlint函数。
文件比较报告:File Comparison Report。
九、 Profile
Profile是能够检测程序性能的工具。
打开:在MATLAB窗口打开Desktop->Profile;在Editor窗口打开Tools->Open Profile;在Command History窗口选择一条语句单击右键,在弹出的快捷菜单中选择Profile Code;在命令行输入“profile viewer”。
运行:检测M文件时在Run this code中输入文件名;检测图形用户界面时首先保证Run this code区空白,点击Start Profiling按钮,然后打开图形用户界面,然后使用,工作完成时点击Profiler窗口的Stop Profiling按钮。
改变Profiler字体:File->Preferences->Fonts,然后选择代码或文本字体,点击Ok或Apply按钮,然后在Profiler窗口刷新。
Profiler简略报告和详细报告。
Profile函数:profile on (开始);profile off(中止)和profile viewer(打开)。