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