C语言程序设计-第11章 C语言程序常见错误与调试方法(原)-35页精选文档
- 格式:ppt
- 大小:514.00 KB
- 文档页数:35
C语言编译环境中的调试功能及常见错误提示调试功能1.常用健<F10> : 激活系统菜单<F6> : 将光标在编辑窗口和、信息窗口之间切换<F3> : 加载<load>一个文件<Alt>+<F5> : 查看程序运行结果<F1> : 得到有关编辑器在线帮助<Ctrl>+<F1> : 得到有关C语言的在线帮助<Ctrl>+<Break> : 终止正在运行的程序2.块操作<Ctrl> KB: 定义块首<Ctrl> KK: 定义块尾<Ctrl> KV: 块移动<Ctrl> KC: 块复制<Ctrl> KY: 块删除<Ctrl> KH: 取消块定义3.查找、替换和删除操作<Ctrl> QF: 查找字符串<Ctrl> QA: 查找并替换字符串Option: G(全程),B(向文件头),N(直接替换)<Ctrl> Y : 删除一行<Ctrl> QY: 删除从光标位置到行末的所有字符编译中的常见错误例析(1) 警告类错误‘XXX’declare but never used变量XXX已定义但从未用过。
‘XXX’is assigned a value which is never used变量XXX已赋值但从未用过。
Code has no effect 程序中含有没有实际作用的代码。
Non-portable pointer conversion不适当的指针转换,可能是在应该使用指针的地方用了一个非0的数值。
Possible use of ‘XXX’before definition表达式中使用了未赋值的变量Redeclaration of ‘main’一个程序文件中主函数main不止一个。
浅析C语言程序调试过程及编程常见错误C语言是一种广泛使用的程序设计语言,常用于开发系统软件和应用软件。
在编写C语言程序时,经常会出现一些错误和bug,因此调试是程序开发过程中不可或缺的一步。
本文将从浅析C语言程序调试过程及编程常见错误两个方面进行分析。
一、C语言程序调试过程1.编译程序:在进行调试前,首先需要将源代码编译成可执行文件。
编译过程中会进行词法分析、语法分析、语义分析等操作,同时会检查语法错误并生成目标代码。
2.设置断点:在需要调试的程序代码中,通过设置断点来指定程序的一些位置停止执行。
断点可以设置在任何地方,包括函数调用、循环语句等。
3.运行程序:运行调试器,加载编译得到的可执行文件,并运行程序。
当程序执行到设置的断点位置时,会自动暂停执行。
4. 调试程序:在暂停执行的位置,可以查看变量的值、执行堆栈信息、运行指令等。
通过观察这些信息,可以发现程序中的错误或bug。
5.单步执行:在调试过程中,可以选择单步执行程序。
单步执行可以按照一条指令一条指令地运行程序,并观察程序的执行情况。
这样可以更精确地找到问题所在。
6. 修改程序:当发现错误或bug时,需要对程序进行修改。
修改可以包括更改变量的值、调整算法逻辑等。
修改后需要重新编译并重新运行程序。
7. 重复调试:进行一次修改后,需要再次运行程序并进行调试。
在多次调试中,需要逐步修复所有的错误和bug,直到程序能够正常运行。
1.语法错误:语法错误是最常见的错误之一、例如忘记加分号、括号不匹配、变量未声明等。
这些错误在编译时会被检测到,并给出详细的错误提示。
2.逻辑错误:逻辑错误是程序中最难调试的错误之一、逻辑错误导致程序的行为和期望的不一致,但不会引发编译错误。
调试逻辑错误需要仔细检查算法和代码逻辑,并通过查看变量值等调试信息逐步找出错误所在。
3.数组越界错误:当访问数组时,需要确保不超出数组的范围。
如果越界访问数组,可能导致程序崩溃或产生不可预料的结果。
如何调试C语言技术程序中的错误调试是软件开发过程中不可或缺的一环,它是发现和解决程序中的错误的过程。
对于C语言技术程序而言,调试是一项至关重要的技能。
本文将探讨如何调试C语言技术程序中的错误,以帮助读者更好地理解和掌握这一技巧。
一、理解错误类型在调试C语言技术程序之前,我们首先需要了解不同类型的错误。
常见的错误类型包括语法错误、逻辑错误和运行时错误。
语法错误是由于程序代码不符合C语言语法规则而导致的错误,通常会在编译阶段被检测到并给出相应的错误提示。
逻辑错误是指程序的逻辑流程有误,导致程序无法按照预期的方式执行。
运行时错误是程序在运行过程中出现的错误,例如访问不存在的内存地址或除以零等。
二、使用调试工具调试工具是调试C语言技术程序的必备工具。
常用的调试工具包括GDB和IDE集成的调试器。
GDB是一个功能强大的命令行调试工具,可以在程序运行过程中暂停执行并检查程序状态。
IDE集成的调试器通常提供了更友好的图形界面和更多的调试功能,例如设置断点、单步执行等。
使用调试工具可以帮助我们更快速地定位和解决错误。
三、使用断点断点是调试过程中常用的一种技术。
通过设置断点,我们可以在程序执行到指定位置时暂停执行,以便检查程序状态。
在调试C语言技术程序时,我们可以在可能出错的地方设置断点,例如函数调用、循环体和条件语句等。
当程序执行到断点处时,我们可以逐步检查变量的值、执行流程以及函数调用等,以确定错误的根源。
四、打印调试信息在调试C语言技术程序时,我们可以使用打印调试信息的方法来帮助我们定位错误。
通过在程序中插入打印语句,我们可以输出变量的值、程序执行的路径以及函数的调用情况等。
这些打印信息可以帮助我们理解程序的执行过程,从而更好地找出错误所在。
在调试完成后,记得删除或注释掉这些打印语句,以免影响程序的性能和可读性。
五、使用单元测试单元测试是一种验证程序单元(如函数、模块等)是否按照预期工作的方法。
在调试C语言技术程序时,我们可以编写一些简单的测试用例来验证程序的功能。
C语言常见错误与调试方法在学习和使用C语言的过程中,出现错误是很常见的。
这些错误可能会导致程序无法正常运行或产生不符合预期的结果。
为了提高代码的质量和效率,我们需要了解常见的C语言错误,并学会相应的调试方法。
1. 语法错误语法错误是最常见的错误类型之一。
它们通常是由于拼写错误、标点符号的错误、缺少分号以及错误的语法结构等问题导致的。
为了避免语法错误,我们应该养成良好的编程习惯,例如检查拼写和标点符号、使用代码缩进和注释来提高代码的可读性。
当遇到语法错误时,我们应该仔细检查所在代码行及其前后的语句,查找可能存在的拼写错误或语法结构错误。
有时,观察编译器给出的错误提示信息也是解决语法错误的关键。
2. 逻辑错误逻辑错误是指程序运行时产生错误结果、逻辑混乱或无法按照预期执行的情况。
这些错误通常是由于程序员的思考不清晰或对问题理解不准确导致的。
要避免逻辑错误,我们需要仔细分析和推理代码的逻辑,确保我们的代码能够完整地涵盖目标问题。
此外,我们还可以使用调试工具来帮助捕捉逻辑错误,例如使用调试器逐步跟踪代码的执行路径、使用断点来观察变量值等。
当遇到逻辑错误时,我们可以尝试使用输出语句在关键位置输出变量的值,以便观察程序的执行情况。
另外,调试工具提供了代码的逐行执行功能,我们可以逐步检查代码并观察变量的值,从而找出逻辑错误的根源。
3. 数组越界错误数组越界错误是指在访问数组元素时超出了数组的范围。
这样的错误可能会导致程序崩溃或者产生不可预测的结果。
为了避免数组越界错误,我们需要确保在访问数组元素之前检查数组的边界。
此外,我们还可以使用循环结构来遍历数组,并通过循环变量来控制访问数组的索引。
当遇到数组越界错误时,我们应该检查涉及的所有循环和条件语句,确定数组索引的范围是否正确。
此外,一些编译器会提供工具来检测数组越界错误,我们可以使用这些工具来优化代码和修复错误。
4. 内存泄漏错误内存泄漏错误是指在程序运行过程中未正确释放不再使用的内存。
编程中常见的错误与调试方法在编程过程中,经常会遇到各种错误,这些错误可能会导致程序无法正常执行或产生意料之外的结果。
为了解决这些问题,我们需要掌握一些常见的错误类型以及相应的调试方法。
本文将介绍一些在编程中常见的错误,并分享一些有效的调试技巧。
一、语法错误语法错误是编程中最常见的错误之一。
当编写代码时,如果违反了编程语言的语法规则,编译器将发出错误提示。
语法错误可能包括拼写错误、缺少分号、错误的标点符号等。
为了解决语法错误,我们可以仔细检查代码,特别是在出现错误提示时,查看引起错误的代码行并进行修正。
二、逻辑错误逻辑错误是指代码没有按照我们预期的方式执行,而不会被编译器检测到。
这类错误常常是由于程序员对问题理解的不准确或者代码逻辑设计有误导致的。
调试逻辑错误的方法包括使用调试工具(如断点调试)、添加输出信息以及使用单元测试等。
通过逐步追踪代码的执行过程,我们可以找到问题所在并进行修正。
三、运行时错误运行时错误是指在程序运行过程中出现的错误。
这类错误可能包括除零错误、空指针引用、数组越界等。
为了解决运行时错误,我们可以使用异常处理机制来捕获和处理异常。
通过在代码中添加适当的异常处理语句,可以使程序在出现异常时不会崩溃或产生不可预期的结果。
四、死循环死循环是指程序中出现了无法跳出的循环。
这类错误常常是由于循环条件设计有误或循环内部的控制逻辑错误导致的。
要解决死循环问题,可以使用调试工具来逐步执行代码,并检查循环条件和循环内部的代码是否正确。
另外,合理使用循环计数器和循环终止条件也可以有效避免死循环的发生。
五、内存错误内存错误是指对内存的错误使用,包括内存泄漏和内存非法访问等。
内存泄漏是指程序在使用完内存后没有正确释放,导致内存占用过多。
内存非法访问是指对未分配或已释放的内存进行读写操作。
为了解决内存错误,我们可以使用内存检测工具来检查代码中的潜在问题,并使用动态内存分配的相关方法来管理内存的申请和释放。
C语言常见错误分析及解决方法C语言常见错误分析及解决方法C.C语言的应用很广泛,越来越多的程序员希望能够学好C由于C 语言的编译系统对语法的检查不如其他语言那么严格,因此C语.下面将C语言中初学者最常见的错误分析如下;1 语句书写错误由于大部分学生都是初次接触程序设计语言,缺乏程序设计的实践,对C语言语句又比较陌生,因此在编写程序时经常出现丢三落四、画蛇添足的情况.语句书写错误主要有:(1)语句结束未加分号或多加分号.C语言规定,分号作为语句的终止符,是语句中不可缺少的一部分.初学者经常忽略这个分号,如: main(); structdate{intyear;intmouth;intday;}{inta=1;……以上两段程序在编译时都会出错.第一段程序在定义结构体变量时,没有添加终止结构定义的“;”,第二段程序在函数定义中第一行的函数名后应该没有“;”.可见每一条语句的后边都要加分号,函数名后边不加分号.因此初学者要特别注意分号的使用.(2){},[],(),′′,″″不配对.解决这个问题最好的方法是在写这些符号的时候先成对书写,然后再在中间添加语句.(3)不该有空格的位置加了空格.例如,在关系运算符<=,>=,==,!=中,两个符号之间不允许有空格.对于以上错误,初学者要相当小心,C语言程序虽然书写格式自由,但这些细节不能忽视.那么解决语句类错误的方法是增强感性认识,加深理解,在思维方式上形成固定的语句模式.初学者要多读程序,阅读程序是学习C语言入门最快、最简洁的方法.特别是对于一些没有学过计算机语言的初学者,应该先阅读教材,学习它们的编程格式、编程风格,多看一些优秀代码,拓展自己的思维能力,开阔眼界.2 定义、初始化、引用方式错误此类错误涉及的是C语言的语法部分.语法是C语言的基础,只有掌握了语法,才能够编写程序.因此要求初学者熟悉C语言的每一个语法,并能根据这些语法来编程.那么C语言中常见的语法错误主要有: 211 使用未经过定义的变量例如:a,b;main(){a=1;b=5;收稿日期:2017—12—10作者简介:朱一峰(1983-),男,辽宁朝阳市人,助教,主要从事计算机教学研究.1994-2017 China Academic Journal Electronic Publishing House. All rights reserved. 朱一峰}a=1;B=5;printf(″%d\n″,a+b);} 41printf(″%d+%d=%d\n″,a,b,a+b);又如:main() {inta,b;以上两段程序在编译时都会出错.C语言要求对程序中用到的每一个变量都必须预先定义,并且严格区分大、小写英文字母.C语言程序习惯上使用小写英文字母,大写英文字母通常作为常量的宏定义和其他特殊的用途.212 数组的定义与引用方式不正确C语言规定,数组定义的形式采用“数组名+[常量表达式]式,不能出现变量或非整型值.(3(; (1)inta[j];(2)intx=10,b[x];(4)213 3pt=&a;int3pt,a;pt前面的“3”是一个指针声明符,表示是一个整形指针变量,在第二条语句中pt前面的“3”是指针运算符,也称为“间接引用运算符”,作用于指针变量,3pt表示指针变量pt所指向的存储空间,相当于变量a.另外,在使用指针前一定要对其进行初始化,否则系统在执行程序时会给出如下的信息:run-timeerrorR6001———nullpointerassigment或者引起更严重的错误使系统崩溃.214 定义函数时出现的错误如:);{printf(″insidesum\n″(1)intfun(inta,intb){intresult;result=a+b;}(2)intsum(void)intsum1(void));{printf(″insidesum1\n″}}在C语言中,函数有返回值时要有返回值语句,第一段程序缺少“return;”语句;一个函数的定义不能从属于另外一个函数,因此函数不能嵌套定义,第二段程序应将函数sum1定义在函数sum之外.解决语法类问题的最好办法是课上认真听讲、积极思考,课下多实践,具体做好以下几点.(1)养成良好的编程习惯.C语言的学习过程就是反复实践的过程,实践环节是非常重要的.要编出好的程序,就要通过上机操作来验证程序的正确性.多上机、勤上机不但可以提高个人反映速度、锻炼心理素质、增强心理承受能力,而且通过执行程序,初学者会发现程序中的错误,从而了解所学知识的不足,同时也能学会根据编译时系统提示的错误信息来改正程序中的错误.(2)学习C语言必须注意代码运行的细节.教材上的例子代码一定要自己动手上机运行一遍,编译、执行结果完全和教材上说的一致才算是学完一个例题,如果与教材不符,就要仔细查找出错原因.除了教材上现有的例子外,自己还要尽可能地“设计”一些程序,以便验证自己的想法是否正确.(3)初学者不要忽视课后习题,应该独立完成所有课后习题,然后参照习题答案中给出的代码,查看自己程序代码的不足,再修改自己的程序.大多初学者不重视习题的做法是错误的,因为作者通常会在习题中给出一些重要的编程思想,而不是简单的检验已学知识.3 混淆错误《C语言常见错误分析及解决方法》。
15.1 C语言编程常见错误如果提示工具连接错误,则表示KEIL安装程序有问题,重新卸载,并全部删除后重新再进行安装后即可。
15.2 KEILC程序调试常见错误pling :C:\8051\MANN.CError:318:can’t open file ‘beep.h’说明在编译C:\8051\MANN.C 程序过程中由于main.c 用了指令#i nclude “beep.h”,但却找不到所致解决方法编写一个beep.h 的包含档并存入到c:\8051 的工作目录中pling:C:\8051\LED.CError 237:’LedOn’:function already has a body说明LedOn( )函数名称重复定义即有两个以上一样的函数名称解决方法修正其中的一个函数名称使得函数名称都是独立的3.WARNING 206:’DelayX1ms’: missing function-prototypeC:\8051\INPUT.CError 267 :’DelayX1ms ‘:requires ANSI-style prototype C:\8051\INPUT.C说明程序中有调用DelayX1ms 函数但该函数没定义即未编写程序内容或函数已定义但未作声明解决方法编写DelayX1ms 的内容编写完后也要作声明或作外部声明可在delay.h 的包含档声明成外部以便其它函数调用4.***WARNING 1:UNRESOLVED EXTERNAL SYMBOLSYMBOL:MUSIC3MODULE:C:\8051\MUSIC.OBJ(MUSIC)***WARNING 2:REFERENCE MADE TO UNRESOLVED EXTERNALSYMBOL:MUSIC3MODULE:C:\8051\MUSIC.OBJ(MUSIC)ADDRESS:0018H说明程序中有调用MUSIC 函数但未将该函数的含扩档C 加入到工程档Prj 作编译和连接解决方法设MUSIC3 函数在MUSIC C 里将MUSIC C 添加到工程文件中去5.***ERROR 107:ADDESS SPACE OVERFLOWSPACE: DATASEGMENT: _DATA_GOUP_LENGTH: 0018H***ERROR 118: REFERENCE MADE TO ERRONEOUS EXTERNALSYMBOL: VOLUMEMODULE: C:\8051\OSDM.OBJ (OSDM)ADDRESS: 4036H说明data 存储空间的地址范围为0~0x7f,当公用变量数目和函数里的局部变量如果存储模式设为SMALL 则局部变量先使用工作寄存器R2~R7 作暂存当存储器不够用时则会以data 型别的空间作暂存的个数超过0x7f 时就会出现地址不够的现象。