CC++中错误分析及程序调试12Word格式文档下载.docx
- 文档编号:17534132
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:9
- 大小:415.60KB
CC++中错误分析及程序调试12Word格式文档下载.docx
《CC++中错误分析及程序调试12Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《CC++中错误分析及程序调试12Word格式文档下载.docx(9页珍藏版)》请在冰豆网上搜索。
有时显示出一大片出错信息往往使人感到问题严重,无从下手。
其实可能只有一二个错误。
例如,对使用的变量未定义,编译时就会对所有含该变量的语句发出出错信息;
有的是少了“}”或多了“}”有的是书写语句时忘记写“;
”或是全角的“;
”了,只要加上一个变量定义,或填加“};
”就所有错误都消除了。
养成写程序习惯,如输入“{”时,中间先不写代码,后面紧接输入”}”,就不会漏了或多了匹配符号。
Main()
{
While()
}
3在改正语法错误后,程序经过连接就得到可执行的目标程序。
运行程序,输入程序所需数据,就可得到运行结果。
应当对运行结果作分析。
看它是否符合要求。
有的人看到运行结果就认为没问题了,就不作分析,这是不好的。
有时,数据比较复杂,难以立即判断结果是否正确。
可以事先考虑好一批“试验数据”,输入这些数据可以得出容易判断正确与否的结果。
例如,if语句有两个分支,有可能在流程经过其中一个分支时结果正确,而经过其它一个分支时结果不对等。
必须考虑周全。
事实上,当程序复杂时很难把所有的可能方案全部都试到,选择典型的情况作试验即可。
4运行结果不对,大多属于逻辑错误。
对这类错误往往需要仔细检查和分析才能发现。
可以采用以下办法:
A将程序与流程图仔细对照,如果流程图是正确的话,程序写错了,是很容易发现的。
例如,复合语句忘记写花括弧,只要一对照流程图就能很快发现。
B如果实在找不到错误,可以采用“分段检查”的方法。
在程序不同的位置设几个printf函数语句,输出有关变量的值,往下检查。
直到找到在哪一段中数据不对为止。
这时就已经把错误局限在这一段中了。
不断减小“查错区”,就可能发现错误所在。
用printf函数语句测试未能发现所有问题,则可用系统提供的调试工具,跟踪流程并给出相应信息,使用更为方便。
(下文介绍)
总之,程序调试是一项细致、较为繁琐的工作,需要下功夫,动脑子,善于累积经验。
在程序调试过程中往往反映出一个人的学习态度,如果以前学习C语言时基础不太好的同学也不要灰心,多写程序,“掌握调试的方法和技术”,要学会自己找问题,这样慢慢自己就会写出错误较少的实用的程序。
C、C++中错误分析及程序调试
若如现:
文件存放目录问题
程序调试方法介绍
一、设置
为了调试一个程序,首先必须使程序中包含调试信息。
一般情况下,一个从AppWizard创建的工程中包含的DebugConfiguration自动包含调试信息,但是是不是Debug版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的Configuration中增加调试信息。
为了增加调试信息,可以按照下述步骤进行:
◆打开Projectsettings对话框(可以通过快捷键ALT+F7打开,也可以通过IDE菜单Project/Settings打开)
◆选择C/C++页,Category中选择general,则出现一个DebugInfo下拉列表框,可供选择的调试信息方式包括:
命令行
Projectsettings
说明
无
None
没有调试信息
/Zd
LineNumbersOnly
目标文件或者可执行文件中只包含全局和导出符号以及代码行信息,不包含符号调试信息
/Z7
C7.0-Compatible
目标文件或者可执行文件中包含行号和所有符号调试信息,包括变量名及类型,函数及原型等
/Zi
ProgramDatabase
创建一个程序库(PDB),包括类型信息和符号调试信息。
/ZI
ProgramDatabaseforEditandContinue
除了前面/Zi的功能外,这个选项允许对代码进行调试过程中的修改和继续执行。
这个选项同时使#pragma设置的优化功能无效
◆选择Link页,选中复选框"
GenerateDebugInfo"
,这个选项将使连接器把调试信息写进可执行文件和DLL
◆如果C/C++页中设置了ProgramDatabase以上的选项,则Linkincrementally可以选择。
选中这个选项,将使程序可以在上一次编译的基础上被编译(即增量编译),而不必每次都从头开始编译。
二、断点
断点是调试器设置的一个代码位置。
当程序运行到断点时,程序中断执行,回到调试器。
断点是最常用的技巧。
调试时,只有设置了断点并使程序回到调试器,才能对程序进行在线调试。
设置断点:
可以通过下述方法设置一个断点。
首先把光标移动到需要设置断点的代码行上,然后
◆按F9快捷键
◆弹出Breakpoints对话框,方法是按快捷键CTRL+B或ALT+F9,或者通过菜单Edit/Breakpoints打开。
打开后点击Breakat编辑框的右侧的箭头,选择合适的位置信息。
一般情况下,直接选择linexxx就足够了,如果想设置不是当前位置的断点,可以选择Advanced,然后填写函数、行号和可执行文件信息。
去掉断点:
把光标移动到给定断点所在的行,再次按F9就可以取消断点。
同前面所述,打开Breakpoints对话框后,也可以按照界面提示去掉断点。
按F5到断点处。
三、值
Watch
VC支持查看变量、表达式和内存的值。
所有这些观察都必须是在断点中断的情况下进行。
观看变量的值最简单,当断点到达时,把光标移动到这个变量上,停留一会就可以看到变量的值。
VC提供一种被成为Watch的机制来观看变量和表达式的值。
在断点状态下,在变量上单击右键,选择QuickWatch,就弹出一个对话框,显示这个变量的值。
单击Debug工具条上的Watch按钮,就出现一个Watch视图(Watch1,Watch2,Watch3,Watch4),在该视图中输入变量或者表达式,就可以观察变量或者表达式的值。
注意:
这个表达式不能有副作用,例如++运算符绝对禁止用于这个表达式中,因为这个运算符将修改变量的值,导致软件的逻辑被破坏。
Memory
由于指针指向的数组,Watch只能显示第一个元素的值。
为了显示数组的后续内容,或者要显示一片内存的内容,可以使用memory功能。
在Debug工具条上点memory按钮,就弹出一个对话框,在其中输入地址,就可以显示该地址指向的内存的内容。
Varibles
Debug工具条上的Varibles按钮弹出一个框,显示所有当前执行上下文中可见的变量的值。
特别是当前指令涉及的变量,以红色显示。
四、进程控制
VC允许被中断的程序继续运行、单步运行和运行到指定光标处,分别对应快捷键F5、F10/F11和CTRL+F10。
各个快捷键功能如下:
快捷键
F5
继续运行
F10
单步,如果涉及到子函数,不进入子函数内部
F11
单步,如果涉及到子函数,进入子函数内部
CTRL+F10
运行到当前光标处。
实验调试题
一、请在VC++环境中调试以下程序,将错误的原因写出来,并改正。
voidmain()
inta=5,b=6,c=7,d=8;
if((a<
b)&
&
(c<
d))printf("
Good\n"
)
elseprintf("
Bad\n"
);
二、以下程序功能:
求5!
。
本题要求掌握测试递归程序的方法(请用前面介绍的断点测试、单步测试或其他方法)
F9,F5,F10,F11
#include<
iostream>
stdio.h>
usingnamespacestd;
longfactorial(longn)//计算n的阶乘
{
longresult=1;
//先将结果设定为1,因为1!
=1,
if(n>
1)//如果n>
1
result=factorial(n-1)*n;
//比如3的阶乘=factorial
(2)*3
}
else//否则n=1
result=1*result;
//由于factorial
(1)=factorial(0)*1,其中
}//factorial(0)在此程序中未被定义,因此可视为递归的
returnresult;
//结束条件,并将factorial(0)设置成了1
intmain(void)
cout<
<
factorial
(1)<
endl;
factorial
(2)<
factorial(3)<
factorial(4)<
factorial(5)<
factorial(6)<
return0;
编程题
一、以下程序功能:
生成及打印10以内的随机数。
(要求掌握函数的编写及调用方法)
提示:
随机数a[]=rand()%上界
stdlib.h>
#defineN20
inta[N];
voidgen_random(intupper_bound)
/*将代码补充完整*/
voidprint_random()
intmain(void)
{//变量定义
/*调用gen_random(?
)*/
/*调用print_random*/
return0;
二、编写百钱买百鸡的程序,用三重循环(每个循环计数100)及一重循环实现,测试它们运行的时间。
参考时间计算方法
time.h>
intmain()
inti;
clock_tstart,finish;
start=clock();
for(i=0;
i<
=1000000;
i++)
;
finish=clock();
printf("
运行时间是%f\n"
difftime(finish,start));
//表示的是毫秒即千分之一秒
三、自行编写一个死循环的程序,用程序调试方法验证出错的位置。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CC 错误 分析 程序 调试 12