




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二十讲:VisualC+的调试技术,杨章伟e-mail:yang505412,课程内容安排,错误类型建立调试环境设置断点使用查看工具高级调试技术综合练习思考和习题,VisualC+的基本调试方法,在开发程序的过程中,经常需要查找程序中的错误。这就需要利用调试工具来帮助读者进行程序的调试。当然目前有许多调试工具,而集成在VisualC+中的调试工具以其强大的功能,深受用户欢迎。,错误类型,一个程序编写完成后往往会存在错误。有些错误在编译连接阶段可以由编译系统发现并指出,称为语法错误。一般来说,当用户对应用程序进行编译(单击菜单【Build】|【Compile】项或按下快捷键【Ctrl+F7】)后产生的错误就是语法错误,常见的语法错误有拼写错误和参数设置错误。例如,当读者将C+的输出函数cout函数写成cuot后,编译系统给出如下图20-1所示错误提示。,另一类错误是逻辑错误,该类错误是没有语法错误的情况下,发生过得让程序无法正确运行的错误。在具体编程中,当修改完语法错误生成了可执行程序后,并不意味着程序已经正确。读者经常会发现程序运行的结果与预期的结果相去甚远。有时甚至在程序执行过程中程序终止或发生死机。这种错误称为就是逻辑错误,或者称为运行错误。这些现象是因为算法设计不当或编程实现时的疏忽造成的。通俗的说这种错误就是BUG。所谓调试就是指在发现了程序存在运行错误以后,寻找错误的原因和位置并排除错误。这一工作是非常困难的。VisualC+的有两个基本调试功能:找出BUG发生的地方和分析如何修改BUG。该调试工具允许读者每次只执行一行程序代码。这样可以更方便地找到BUG发生的地方。,建立调试环境,在VisualC+中每当建立一个工程(Project)时,VisualC+都会自动建立两个版本:Release版本和Debug版本。正如其字面意思所说的,Release版本是当程序完成后,准备发行时用来编译的版本。而Debug版本是用在开发过程中进行调试时所用的版本。在新建立的工程中,读者所看到的是Debug版本。如果要选择Release版本,可以单击【Project】|【Settings】命令。,设置断点,设置了调试环境后,读者再来看一下调试的一般过程。所谓调试,就是在程序的运行过程的某一阶段观测程序的状态,而在一般情况下程序是连续运行的,所以必须使程序在某一地点停下来。所以读者进行调试所做的第一项工作就是设立断点。其次,再运行程序,当程序在设立断点处停下来时,再利用各种工具观察程序的状态。程序在断点停下来后,有时需要按用户的要求控制程序的运行,以进一步观测程序的流向。所以下面依次来介绍断点的设置,如何控制程序的运行以及各种观察工具的利用。,ActiveX控件的事件,在VisualC+中,用户可以设置多种类型的断点,可以根据断点起作用的方式把这些断点分为如下3类:与位置有关的断点。与逻辑条件有关的断点。与WINDOWS消息有关的断点。,位置断点,读者只要把光标移到要设断点的位置。当然这一行必须包含一条有效语句的。然后按工具条上的按钮(Insert/RemoveBreakPoint)或按下快捷键【F9】。此时读者将会在屏幕上看到在这一行的左边出现一个红色的圆点,表示这一行设立了一个断点,如图20-4所示。,逻辑条件触发断点,上面所讲的断点主要是由于其位置发挥作用的,即当程序运行到设立断点的地方时程序将会停下来。但有时需要设立只与逻辑条件有关的断点,而与位置无关。读者可以在【Breakpoint】对话框中的【Data】选项卡中输入逻辑条件,如图20-9所示。,使用查看工具,调试过程中最重要的是要观察程序在运行过程中的状态。这样用户才能找出程序的错误之处。这里所说的状态包括各变量的值、寄存中的值、内存中的值和堆栈中的值等。,调试信息泡泡,当程序在断点停下来后,要观察一个变量或表达式的值的最容易的方法是利用调试信息泡泡。要看一个变量的值,只需在源程序窗口中,将鼠标放到该变量上,将会看到一个信息泡泡弹出。其中显示出该变量的值。要查看一个表达式的值,先选中该表达式,然后将鼠标放到选中的表达式上。同样会看到一个信息泡泡弹出以显示该表达式的值。如图20-16所示的红色框线内就是一个调试信息泡泡。,变量窗口,单击【View】|【DebugWindow】|【Variables】命令,则变量窗口将出现在屏幕上。其中显示着变量名及其对应的值。读者将会看到在变量观察窗口的下部有3个标签:【Auto】、【Local】和【This】。选中不同的标签,不同类型的变量将会显示在该窗口中,如图20-17所示。,观察窗口,单击【VIEW】|【DebugWindow】|【Watch】命令,则观察窗口将出现在屏幕上,如图20-18所示。在下图的观察窗口中双击Name栏的某一空行,输入要查看的变量名或表达式。回车后读者将会看到对应的值。观察窗口可有多页,分别对应于标签Watch1、Watch2、Watch3等。,快速查看变量对话框,在快速查看变量对话框中,读者可以像利用观察窗口一样来查看变量或表达式的值。还可以利用它来改变运行过程中的变量。在【Debug】菜单,选择【QuickWatch】命令。这时屏幕上将会出现【QuickWatch】对话框,如图20-19所示。在上图中的【Expression】编辑框中输入变量名例如a。按回车后在【CurrentValue】格中将出现变量名及其当前对应的值,如图20-20所示。,高级调试技术,前面介绍了调试工具的使用,利用它可以就进行常规的调试,即使程序在某处停下来,再观察程序的当前壮态。而且这些工具在且它调试器中也有。但是在VisualC+程序的开发过程中,光有这些工具是不够的。为了更快更好地开发程序,还需要利用更高级的调试工具。TRACE宏断言对象的DUMP函数,TRACE宏,TRACE宏与在C语言中用的Printf函数类似。它使程序在运行过程中输出一些调试信息,以使读者能了解程序的一些状态。但有一点不同的是:TRACE宏只有在调试状态下才有所输出,而以前用的Printf函数在任何情况下都有输出。和Printf函数一样,TRACE函数可以接受多个参数。例如在以下代码中就使用到了TRACER宏。intx=1;inty=16;floatz=32.0;TRACE(ThisisaTRACEstatementn);TRACE(Thevalueofxis%dn,x);TRACE(x=%dandy=%dn,x,y);TRACE(x=%dandy=%xandz=%fn,x,y,z);需要注意的是,TRACE宏只对Debug版本的工程产生作用。在Release版本的工程中,TRACE宏将被忽略。,断言,在开发过程中可以假设只要程序运行正确,某一条件肯定成立。如不成立,那么可以断言程序肯定出错,在这种情况下就可以利用ASSERT宏来设定断言。ASSERT宏的参数是一个逻辑表达式。在程序运行过程中,若该逻辑表达式为真,则不会发生任何动作。若此表达式为假,系统将弹出一个对话框警告,并停止程序的执行。同时要求用户做出选择:Abort、Ignore或Retry。若选择Abort,系统将停止程序的执行;若选择Ignore,系统将忽略该错误,并继续执行程序;若选择Retry,系统将重新计算该表达式,并激活调试器。同TRACE宏一样,ASSERT宏只DEBUG版本中起作用,在RELEASE版本中ASSERT宏将被忽略。,下面程序段在函数中就加入了ASSERT宏来设定断言。设定后程序能判断何处出错,其实现代码如下所示。代码清单20-11#include/包含头文件2#include/包含ASSERT宏的头文件3usingnamespacestd;4voidkk(char*st)/定义函数56assert(NULL!=st);/仅仅加入了这一行断言7coutstendl;/输出字符串8return;910intmain()1112char*str=Welcometo21VisualC+;/定义字符串并初始化13kk(str);/调用函数14str=NULL;/改变字符串值15kk(str);/调用函数16getchar();17return0;/主函数返回值18,综合练习,下列程序段求出100以内的所有素数。所谓素数是指大于2且只能被1或本身整除的整数。判断素数的算法为:对于i,只要其能够被2i-1中任一个数整除,则i不是素数。,代码清单,01#include02intmain(intargc,char*argv)0304constn=100;05inti,j;06for(i=2;i=n;i+)0708intflag=1;09fo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025电缆租赁合同范本
- 2025年解除劳动合同协议书下载
- 医院入股协议合同范本
- 车辆贷款的合同范本
- 商铺抵款合同范本
- 租赁协议车位合同范本
- 测绘协议合同范本
- 2025电商联销合同
- 饮品代理加盟合同范本
- 租公寓房合同范本
- 传统白酒生产项目商业计划书
- 2025年教师资格证考试综合素质(中学)试题及答案
- 江苏省淮安市2024-2025学年高一下学期期末考试物理试卷(解析版)
- 《基孔肯雅热防控技术指南(2025年版)》解读课件
- 2025年呼伦贝尔市生态环境局所属事业单位引进人才(2人)模拟试卷附答案详解(综合卷)
- 2025年中国建设银行招聘考试(综合知识)历年参考题库含答案详解(5套)
- BMS基础知识培训课件
- 承接战略贴近业务人力资源规划设计到应用
- 2025年广元市专业技术人员公需科目继续教育考试试题及答案
- 消防外管网维修合同范本
- 飞行员心理健康培训课件
评论
0/150
提交评论