程序调试与常见程序错误
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序调试与常见程序错误
目录
一、在Codeblocks中调试程序 (1)
二、存储路径设置问题 (4)
三、修改Codeblocks的设置 (4)
四、提示程序无法调试问题 (6)
五、常见错误分析 (6)
六、程序出错的三种情况 (18)
七、常用的纠错方式 (19)
一、在Codeblocks中调试程序
1.注意事项
不允许工程路径中含有空格、汉字。
2.在相应行号后面点击鼠标左键设置断点
3.打开W ATCHS窗口
4.点击调试按钮
5.可以再watchs窗口看到自动变量。黄色三角表示程序暂停的位置
6.通过单步运行按钮进行单步运行。
7.也可以在debuger标签,command栏输入调试命令进行单步运行、打印变量值等操作。
8.程序运行
二、存储路径设置问题
1. 如果不是默认安装路径,code blocks 就无法找到编译器和调试器,就会出现此类问题。
解决办法:Settings——Compiler and debugger——Toolchain executables——Auto-detect。
2. 输出信息为“某个命令执行失败或异常终止”。
解决方法:通常是相应的编译器找不到,试着将其所在路径放到path环境变量中去。
3. 输出编译错误,如某某文件找不到之类。
解决方法:在项目中设置选项中加上路径(通常可利用customer variable项)。
4. 在调试程序的时候弹出类似""XYZ - Debug": The compiler's setup (GNU GCC Compiler)
is invalid, so Code::Blocks cannot find/run the compiler.
Probably the toolchain path within the compiler options is not setup correctly?!
Goto "Settings->Compiler and debugger...->Global compiler settings->GNU GCC Compiler->Toolchain executables" and fix the compiler's setup.
Skipping...
Nothing to be done (all items are up-to-date)."这种警告。
解决方法:这个错误提示已经说得很清楚了, 找不到编译器, 到菜单Settings->Compiler and debugger...->Global compiler settings->GNU GCC Compiler->Toolchain executables下去修复编译选项前提是你已经装了gcc
如过没装, 就去下个包含mingw的codeblocks, (mingw包含gcc编译器);
三、修改Codeblocks的设置
1.
2.
3.
4.
四、提示程序无法调试问题
多次调试一个程序时出现"cannot open output film D:\c++\文件名.exe Permission denied"
解决方法:启动任务管理器,找到文件.exe关闭就可以了。
五、常见错误分析
1.忘记定义变量。
例如:
main()
{x=3;
y=6;
printf("%d\n",x+y);
}
C要求对程序中用到的每一个变量都必须定义其类型,上面程序中没有对x、y进行定义。应在函数体的开头加int x,y;这是学过BASIC和FORTRAN语言的读者写C程序时常见的一个错误。在BASIC语言中,可以不必先定义变量类型就可直接使用。在FORTRAN 中,未经定义类型的变量按隐含的I-N规则决定其类型,而C语言则要求对用到的每一个
变量都要在本函数中定义(除非已定义为外部变量)。
2.输入输出的数据的类型与所用格式说明符不一样。
例如:
若a已定义为整型,b已定义为实型。
a=3;b=4.5;
printf("%f%d\n",a,b);
编译时不给出出错信息,但运行结果将与原意不符,输出为
0.00000016402
它们并不是按照赋值的规则进行转换(如把4.5转换成4),而是将数据在存储单元中的形式按格式符的要求组织输出(如b占4个字节,只把最后两个字节中的数据按%d,作为整数输出)。
3.未注意int型数据的数值范围。
例如:
一般微型计算机上使用的C编译系统,对一个整型数据分配两个字节。因此一个整数的范围为
-215~215-1,即-32768~32767。常见这样的程序段:
int num;
num=89101;
printf("%d",num);
得到的却是23565,原因是89101已超过32767。两个字节容纳不下89101,则将高位截去。即将超过低16位的数截去。即将89101减去216(即16位二进制所形成的模)。89101-65536=23565。
有时还会出现负数。例如
num=196607;
输出得-1。因为196607的二进制形式为
00 00 00 00 00 00 00 1011 11 11 11 11 11 11 11
去掉高位10,低16位的值是-1(-1的补码是:1111111111111111)。
对于超过整个范围的数,要用long型,即改为
long int num;
num=89101;
printf("%ld",num);
请注意,如果只定义num为long型,而在输出时仍用“%d”说明符,仍会出现以上错误。
4.在输入语句scanf中忘记使用变量的地址符。
例如:
scanf("%d%d",a,b);
这是许多初学者刚学习C语言时一个常见的疏忽,或者说是习惯性的错误,因为在其他语言中在输入时只需写出变量名即可,而C语言要求指明“向哪个地址标识的单元送值”。