第7讲-MATLAB程序调试及Cell单元功能
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
为什么用cell单元?
在一个代码很长的m脚本文件中,可能需要对 其中的一段代码进行反复修改、查看执行效果, 这时,cell模式就非常有用,cell相当于把M文 件中的所有代码分成几个模块,每个模块可以 单独运行。用光标点击某一个cell中任意位置 时,背景将变为特定的颜色。cell模式中,断 点不起作用,但被调用的子程序中的断点是可 以起作用的。
cell(单元)的使用(续)
给cell加标题
在分隔符%%后键入一个空格,然后紧跟单元 标题,MATLAB自动将其用粗体显示。加单元 标题可提高程序的可读性。 当鼠标位于某一单元的任一行时,该单元所有 的代码会被高亮显示。背景色可通过菜单选项 设置File > Preferences > Editor/Debugger > Display,修改cell display options。
打开例子程序: open(fullfile(matlabroot,'help','techdoc','matlab_en v','examples','lengthofline.m'))
剖析器(profiler)
在剖析器里面运行一个MATLAB语句或M文件, 它会给此语句或文件的运行时间。可以从 Desktop菜单访问剖析器。利用剖析器来计算 某段程序运行时间的方法有两种: (1) 直接在profiler窗口中的Run this code栏输 入想分析的语句或M文件名称,然后点击Start Profiling或按回车键即可(注意被分析的M文 件一定要在搜索路径或当前目录中)。 (2) 嵌入代码分析器;在预分析的代码段的的 首尾分别加上profile on 和profile viewer 命令, 当程序正常运行结束时,代码分析器窗口将弹 出。
⑤
检测变量的方法:
a) b)
c) d)
在Stack域选择工作空间。 在M文件编辑/调试器中把鼠标放在你所关注 的变量上,用数据提示查看变量的值。 在命令窗口中查看值 在工作空间浏览器和阵列编辑器中查看值。
程序调试的过程(续)
⑥
纠正问题和结束调试 a. 修改值检测结果 调试时,可以在命令窗口给要检测的变量赋一新值, 看接下来程序的反应,如与预期结果相同,则没问题; 若有,则说明程序有问题。 b. 结束调试 要修改,保存文件必须退出调试模式。按退出调试 模式的按钮 c. 清除断点 从debug下拉菜单中选Enable/Disable Breakpoint使 断点失灵,从而暂时忽略断点。或者点击 清除所有 断点。
(2) 条件断点,在特定条件下停在指定行 (3) 错误断点,在特定类型的错误如警告、 NaN、无穷值出现时程序停止运行,不用在 指定的文件中指定行设置断点。
程序调试的过程(续)
设置断点的方法: (1)点击M文件编辑器的breakpoint alley 栏,即 点击代码前的“-” ;也可把鼠标放在设断点 的那一行,而后点击工具栏上的设置断点按 钮 ,或点击右键点击Set/clear Breakpoint。 (2)红色表示有效断点,灰色表示无效断点,断 点为灰色的原因是文件被修改后未保存或此文件 中存在语法错误。
代码分析窗口所包含的信息
Function Name : 函数名; Calls : 函数被调用次数; Total Time : 执行该函数的CPU总用时,包 含任何其它被它调用的函数的CPU时间。 Self Time : 执行该函数的CUP总用时,不包 含任何其它被它调用的函数的CUP时间。 Total Time Plot : 时间用时的曲线图。
cell(单元)的使用(续)
一旦定义了单元,就可以使用cell工具栏中的 按钮实现在单元间切换查看各单元的代码,并 且可独立的测试每个单元的代码,查看相应的 输出结果,即完成修改单元代码的参数及调试。
cell工具栏如下所示:
显示单元标题
运行当前cell代码, 运行当前 运行文件中 cell 代码 且运行完毕后跳到 的所有代码 下一个单元
点击M-Lint信息指示器可 以使光标到达下一个出现 错误或警告的位置。
代码段下方的红色波浪线表示 被高亮的一些代码标明此处的 该处有错误或警告,鼠标放在 错误或警告可以利用 M-Lint 自 上面会出现相应的M-Lint 信息。 动修改它 ,把光标放在此代 码上,然后点击鼠标右键即可 实现。 M-Lint信息栏,红色标 记代表错误,橘黄色标 记代表警告或可以改进 的地方。把鼠标放在标 记上可以查看检测消息。
注意:当完成代码分析后,请删除profile on和 profile viewer命令,因为嵌入代码分析器会使 程序运行变慢。
条件断点的设置
如果想要在一定循环次数后检查程序的运 行结果,可以设置条件断点。 点击设置断点的行,按右键在下拉菜单中选中 Set/Modify Conditional Breakpoint,然后在条 件断点对话框中输入条件,点击确定后此行前 出现黄色提示符。 运行程序,当条件满足时,MATLAB就进入调 试模式。
插入一个 cell分隔线
cell(单元)的使用(续)
查看某个单元,可通过点击显示单元标题按 钮 ,挑选要查看的单元标题 测试单元代码,用菜单项Cell中的测试选项 或工具栏上的按钮,测试时,单元的输出结 果会显示在命令窗口或图形窗口。 单元测试功能可以运行M文件编辑/调试器中 当前显示的代码,即使代码被修改后没有保 存。测试的单元所在的M文件不必处于 MATLAB的搜索路径。
cell(单元)的使用(续)
运行之后,修改单元中的数值,单元会自动重 新计算并输出结果,不必再次点击运行按钮。 要修改单元中的数值,首先要把鼠标放在该数 旁边,而后用单元工具栏上的数值修改工具。 对数值进行修改。用这个工具,可以对这个数 进行加、减、乘、除运算。 注意:MATLAB不会自动保存用单元工具栏对 变量进行的修改,所以修改后要务必手动保存。
M文件编辑/调试器
由现存的代码创建M文件的方法: 用命令历史窗口中的语句,选中语句点击右 键,选择Creat M-File。 在大部分MATLAB函数(非内置函数)和工 具箱函数上进行修改,改完后保存或另存。 Demos中的例子。
程序的调试
程序一般可能出现的错误有: (1)语法错误,如拼写错误等,此种错误很容 易被发现。 (2)运行错误,即用户编写的算法出现错误, 此种错误不容易检测,要不断的进行调试。
M-Lint 代码检测和剖析报告
① ② ③ ④
M-Lint信息帮助用户学习更多的MATLAB特性, 更加高效地开发M语言代码。M-Lint帮助用户仔 细地遍历代码,使得代码更加简洁,高效和可 维护。 调用M-Lint的方法: 从MATLAB的Editor/Debugger,选择Tools,并 点击Check Code with M-Lint 使用matlab-mode观测M-Lint信息 在Current Directory browser,选择M-Lint Code Check Report 在MATLAB命令行窗口键入mlint
使用M-Lint 的方法:
可以对现有的M文件或一组M文件产生一个报 告,根据报告中的意见去修改,或利用M-Lint 的自动代码纠正功能,在M文件编辑/调试器中 边工作边让它来检测。
编辑/调试器中的M-Lint 自动代码分析器
①
②
分析器可对编辑/调试器中的M文件完成连续 的、自动的代码检测 。 自动代码分析器的使用方法: 使用它之前要确信M-Lint是有效的(在File>Preferences->M-Lint中设置)。 打开要编辑/调试的文件,编辑窗口的右上边 缘有一个M-Lint信息指示器:若为红色则表 示有语法错误;为橘黄色则表示警告或有可 以改进的地方,但没有错误;为绿色则表示 既没有语法错误又没有警告和改进的地方 。
语法错误的检测方法(续)
当运行有语法错误的M文件时,MATLAB在 命令窗口显示错误信息,并显示出它所在的 行。点击错误信息部分的下划线,相应的M 文件被打开,且光标指向错误所在的那行。
设置断点时注意事项: 程序调试的过程 (1)如果想要检查循环增量的值,不要再for 语句处设置断点,而是在for语句的下一行设 ① 置,因为 在调试程序之前先要确定被调试的文件已被 MATLAB只执行一次for语句,所以 保存,且已被加载到搜索路径或设置为当前 在 for语句处设断点,看不到增量的变化。 路径。 ( 2)在M文件编辑/调试器中,左侧标注行号 ② 的后面具有“-”的行才是可执行行,否则为 设置断点 不可执行行,如注释行、空行。断点要设置在 有三种基本类型的断点可以设置: 可执行行上,如果设在不可执行,系统认为断 (1) 标准断点,停在指定行 点是被设在了该行的下一行。
程序调试的过程(续)
③
按F5运行M文件,碰到断点停止。运行后的结 果为: 命令窗口的提示符变成了 K>> 表示MATLAB 正处于调试状态 。 断点处的绿色箭头指出了接下来要被执行的语 句(言外之意是此行还未运行)。 Stack域显示出当前的函数,注意工作空间既 可看到基本工作空间的变量也可看到函数的工 作空间的局部变量。
cell(单元)的使用
在MATLAB的编辑/调试器中选择菜单项cell >Enable Cell Mode Cell启动单元模式。
cell(单元)的使用(续)
用分隔符“%%” 定义单元
在要定义cell的代码行的前一行插入分隔符 %%,表示一个新的单元的开始。 一个单元是从本单元的%%开始到下一个单元 的%%结束。 单元间的水平线可区分各个单元,该水平线在 打印M文件时不显示。 MATLAB不执行以%%开头的代码行,一般 %%后是单元标题,所以应该从该行的下一行 开始编写代码。
语法错误的检测方法
利用MATLAB系统预设的一些语法强调颜色 可检测出错误所在;如关键字为蓝色,错误 为红色等,请查看File->Preferences>Color中的M-File syntax highlighting colors栏。 利用分隔符匹配可正确地匹配括号和关键字 选择菜单File-> Preferences-> Keyboard > Delimiter Matching设置调试器检查的匹 配。
第七讲
MATLAB程序调试及Cell单元功能
MATLAB中的快捷键
注释符号用“%” 多行加注释用Ctrl+R,取消多行注释用Ctrl+T; 也可以选中需要添加或取消注释的程序,然后 在菜单Text中/或者单击鼠标右键选择Comment。 或者Uncomment添加或取消注释。 编写代码时层次设置,减小缩进 Ctrl+[ ,增大 缩进 Ctrl+] 对齐代码用Ctrl+I
返回
返回
返回
程序调试的过程(续)
④Hale Waihona Puke Baidu
单步调试M文件
当点击跳入子函数时,Stack域显示子函数的 工作空间。子函数中的调试方法与主函数相同
继续运行,直到 单步运行 退出调试 跳出函数 进入函数 遇到下一个断点 模式 step out step in
程序调试的过程(续)
检测你所关注的变量。当程序在断点处停止 运行时,你可以查看工作空间中的任意变量 的当前值。若当前值与预期值相符,则程序 没错,运行下一行,否则,在本行或前一行 寻找错误。