




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、程序调试技术程序调试技术主讲教师:唐郑熠主讲教师:唐郑熠程序调试概述程序调试概述n任何程序员都不能保证自己所编写的程序任何程序员都不能保证自己所编写的程序完全没有错误完全没有错误n几乎任何复杂一点的程序都必须经过反复几乎任何复杂一点的程序都必须经过反复的调试和修改的调试和修改n因此程序调试技术是一个程序员必备的基因此程序调试技术是一个程序员必备的基本技能本技能程序调试概述程序调试概述n程序调试具有很强的技术性和经验型,其程序调试具有很强的技术性和经验型,其效率高低在很大程度上依赖于程序员的经效率高低在很大程度上依赖于程序员的经验验n程序调试的经验虽然可以借鉴他人,但更程序调试的经验虽然可以借鉴
2、他人,但更重要的是靠实践来积累重要的是靠实践来积累程序调试概述程序调试概述n模块化的程序结构,可以在相对较小的范模块化的程序结构,可以在相对较小的范围内确定出错误,较快的改正错误并进行围内确定出错误,较快的改正错误并进行重新编译。且不同的模块可以由不同的程重新编译。且不同的模块可以由不同的程序员进行编写和调试序员进行编写和调试n反之,如果把大量的程序功能堆积在一个反之,如果把大量的程序功能堆积在一个函数中,不仅增加了程序的复杂度,而且函数中,不仅增加了程序的复杂度,而且会导致调试时很难确定错误所在会导致调试时很难确定错误所在n即使找到了错误,改正起来也很麻烦,甚即使找到了错误,改正起来也很麻烦
3、,甚至会引入新的错误至会引入新的错误程序调试概述程序调试概述n模块化的程序结构,可以在相对较小的范模块化的程序结构,可以在相对较小的范围内确定出错误,较快的改正错误并进行围内确定出错误,较快的改正错误并进行重新编译。且不同的模块可以由不同的程重新编译。且不同的模块可以由不同的程序员进行编写和调试序员进行编写和调试n反之,如果把大量的程序功能堆积在一个反之,如果把大量的程序功能堆积在一个函数中,不仅增加了程序的复杂度,而且函数中,不仅增加了程序的复杂度,而且会导致调试时很难确定错误所在会导致调试时很难确定错误所在n即使找到了错误,改正起来也很麻烦,甚即使找到了错误,改正起来也很麻烦,甚至会引入新
4、的错误至会引入新的错误程序错误的类别程序错误的类别n程序设计中常见的错误可分为三类:程序设计中常见的错误可分为三类:编译错误编译错误运行时错误运行时错误逻辑错误逻辑错误编译错误编译错误n编译错误是指程序在编译过程中出现的错编译错误是指程序在编译过程中出现的错误,它是由于不正确的代码编写而产生的误,它是由于不正确的代码编写而产生的n如非法使用或丢失关键字、遗漏了必需的如非法使用或丢失关键字、遗漏了必需的符号、函数调用缺少参数或参数不匹配等符号、函数调用缺少参数或参数不匹配等For(i=0; i100; i+)s=s+i;运行时错误运行时错误n运行时错误是指应用程序在运行期间执行运行时错误是指应用
5、程序在运行期间执行了非法操作或某些操作失败了非法操作或某些操作失败n如打开的文件未找到、磁盘空间不足、网如打开的文件未找到、磁盘空间不足、网络连接断开、除数为络连接断开、除数为0等等int array4;int i;for(i=0; i=4; i+)arrayi=i;逻辑错误逻辑错误n逻辑错误是指应用程序未按照预期的方式逻辑错误是指应用程序未按照预期的方式运行时所产生的错误运行时所产生的错误n一般来讲,该类错误不属于语法层次的错一般来讲,该类错误不属于语法层次的错误,应用程序可以执行,但是得不到正确误,应用程序可以执行,但是得不到正确的预期结果的预期结果int sum;int i;for(i=
6、1; i=100; i+)sum=sum+i;程序调试的类别程序调试的类别n程序调试主要分为两类:程序调试主要分为两类:静态调试静态调试动态调试动态调试静态调试静态调试n静态调试就是在程序编写成后,由人工静态调试就是在程序编写成后,由人工“代替代替”或或“模拟模拟”计算机,对程序进行计算机,对程序进行仔细检查,主要检查程序中的语法规则和仔细检查,主要检查程序中的语法规则和逻辑结构的正确性逻辑结构的正确性n实践表明,有很大一部分错误可以通过静实践表明,有很大一部分错误可以通过静态调试来发现态调试来发现n通过静态调试,可以大大缩短上机调试的通过静态调试,可以大大缩短上机调试的实践,提高上机效率实践
7、,提高上机效率语法规则检查语法规则检查n语句正确性检查语句正确性检查 保证程序中每个语句的保证程序中每个语句的正确性是编写程序时的基本要求。由于程正确性是编写程序时的基本要求。由于程序中包含大量的语句书写过程中由于疏忽序中包含大量的语句书写过程中由于疏忽或笔误语句写错再所难免。对程序语句的或笔误语句写错再所难免。对程序语句的检查应注意以下几点:检查应注意以下几点:检查每个语句的书写是否有字符遗漏,包括必检查每个语句的书写是否有字符遗漏,包括必要的空格符是否都有要的空格符是否都有检查形体相近的字符是否书写正确,例如字母检查形体相近的字符是否书写正确,例如字母o和数字和数字0书写时要有明显的分别书
8、写时要有明显的分别检查函数调用时形参和实参的类型、个数是否检查函数调用时形参和实参的类型、个数是否相同相同语法规则检查语法规则检查n语法正确性检查语法正确性检查 每种计算机语言都有自每种计算机语言都有自己的语法规则书写程序时必须遵守一定的己的语法规则书写程序时必须遵守一定的语法规则否则编译时程序将给出错误信息语法规则否则编译时程序将给出错误信息n语句的配对检查:许多语句都是配对出现语句的配对检查:许多语句都是配对出现的,不能只写半个语句。另外语句有多重的,不能只写半个语句。另外语句有多重括号时,每个括号也都应成对出现,不能括号时,每个括号也都应成对出现,不能缺左少右缺左少右n 注意检查语句顺序
9、:有些语句不仅句法本注意检查语句顺序:有些语句不仅句法本身要正确,而且语句在程序中的位置也必身要正确,而且语句在程序中的位置也必须正确。例如变量定义要放在所有可执行须正确。例如变量定义要放在所有可执行语句之前语句之前 逻辑结构检查逻辑结构检查n检查程序中各变量的初值和初值的位置是否正确检查程序中各变量的初值和初值的位置是否正确n我们经常遇到累加、累乘,其初值和位置都非常我们经常遇到累加、累乘,其初值和位置都非常重要。用于累加的变量,应取重要。用于累加的变量,应取0初值或给定的初初值或给定的初值;用于累乘的变量,应赋初值为或给定的值。值;用于累乘的变量,应赋初值为或给定的值。因为累加或累乘都是通
10、过循环结构来实现的因此因为累加或累乘都是通过循环结构来实现的因此这些变量赋初值语句应在循环体之外这些变量赋初值语句应在循环体之外n对于多重循环结构,内循环体中的变量赋初值语对于多重循环结构,内循环体中的变量赋初值语句,应在内循环之外;外循环体中的变量赋初值句,应在内循环之外;外循环体中的变量赋初值语句,应在外循环之外。如果赋初值的位置放错语句,应在外循环之外。如果赋初值的位置放错了那么将得不到预想的结果了那么将得不到预想的结果逻辑结构检查逻辑结构检查n检查程序中分枝结构是否正确检查程序中分枝结构是否正确n程序中的分枝结构都是根据给定的条件决定执行程序中的分枝结构都是根据给定的条件决定执行的不同
11、路径,因此在设置各条路径的条件时一定的不同路径,因此在设置各条路径的条件时一定要谨慎要谨慎n在设置大于、小于这些条件时,一定要仔细考虑在设置大于、小于这些条件时,一定要仔细考虑是否应该包括等于这个条件,更不能把条件写反是否应该包括等于这个条件,更不能把条件写反n尤其要注意的是,实型数据在运算过程中会产生尤其要注意的是,实型数据在运算过程中会产生误差,如果用等于或不等于对实数的运算结果进误差,如果用等于或不等于对实数的运算结果进行比较,则会因为误差而产生误判断行比较,则会因为误差而产生误判断(fabs(a-b)1e-6)n要特别注意条件语句嵌套时要特别注意条件语句嵌套时if和和else的配对关系
12、的配对关系逻辑结构检查逻辑结构检查n检查程序中循环结构的循环次数和循环嵌套的正检查程序中循环结构的循环次数和循环嵌套的正确性确性nC语言中可用语言中可用for循环、循环、while循环、循环、do-while循循环。在给定循环条件时,不仅要考虑循环变量的环。在给定循环条件时,不仅要考虑循环变量的初始条件,还要考虑循环变量的变化规律、循环初始条件,还要考虑循环变量的变化规律、循环变量变化的时间,任何一条变化都会引起循环次变量变化的时间,任何一条变化都会引起循环次数的变化数的变化逻辑结构检查逻辑结构检查n检查表达式的合理与否检查表达式的合理与否n程序中不仅要保证表达式的正确性,还要保证其程序中不仅
13、要保证表达式的正确性,还要保证其合理性。尤其要注意表达式运算中的溢出问题合理性。尤其要注意表达式运算中的溢出问题n由于表达式不合理而引起的程序运行错误,往往由于表达式不合理而引起的程序运行错误,往往很难查找,会增加程序调试的难度很难查找,会增加程序调试的难度n因此认真检查表达式的合理性是减少程序运行错因此认真检查表达式的合理性是减少程序运行错误提高程序动态调试效率的重要方面误提高程序动态调试效率的重要方面动态调试动态调试n动态调试就是实际的上机调试,它贯穿在动态调试就是实际的上机调试,它贯穿在编译、连接和运行的整个过程中。编译、连接和运行的整个过程中。n根据根据程序编译程序编译、连接连接和和运
14、行时运行时计算机给出计算机给出的错误信息进行程序调试的错误信息进行程序调试编译过程中的调试编译过程中的调试n 编译过程会对源程序进行语法检查,并显示错误编译过程会对源程序进行语法检查,并显示错误信息。信息。n有时会出现若干行相同的错误信息,检查这些行有时会出现若干行相同的错误信息,检查这些行本身没有发现错误。这时要仔细检查与这些行有本身没有发现错误。这时要仔细检查与这些行有关的名字、表达式是否有问题。关的名字、表达式是否有问题。n例如因为程序中数组说明语句有错这时,那些与例如因为程序中数组说明语句有错这时,那些与该数组有关的程序行都会被编译系统检查出错。该数组有关的程序行都会被编译系统检查出错
15、。此时只要修改数组说明语句,这些错误就会消失此时只要修改数组说明语句,这些错误就会消失n对于编译阶段的调试,要充分利用屏幕给出的错对于编译阶段的调试,要充分利用屏幕给出的错误信息对它们进行仔细分析判断。只要注意总结误信息对它们进行仔细分析判断。只要注意总结经验,使程序通过编译是不难做到的经验,使程序通过编译是不难做到的连接过程中的调试连接过程中的调试n连接的过程也有查错的功能,它将指出外部调用、连接的过程也有查错的功能,它将指出外部调用、函数之间的联系,以及存储区设置等方面的错误函数之间的联系,以及存储区设置等方面的错误n如果连接时有这类错误,编译系统也会给出错误信如果连接时有这类错误,编译系
16、统也会给出错误信息,用户要对这些信息仔细判断从而找出程序中的息,用户要对这些信息仔细判断从而找出程序中的问题并改正问题并改正n连接时较常见的错误有以下几类连接时较常见的错误有以下几类 某个外部调用有错,通常系统明确提示了外部调用的名某个外部调用有错,通常系统明确提示了外部调用的名字,只要仔细检查各模块中与该名有关的语句,就不难字,只要仔细检查各模块中与该名有关的语句,就不难发现错误发现错误找不到某个库函数或某个库文件,这类错误是由于库函找不到某个库函数或某个库文件,这类错误是由于库函数名写错、疏忽了某个库文件的连接等造成的数名写错、疏忽了某个库文件的连接等造成的 某些模块的参数超过系统的限制,如模块的大小、库文某些模块的参数超过系统的限制,如模块的大小、库文件文件的个数超出要求等件文件的个数超出要求等连接过程中的调试连接过程中的调试n引起连接错误的原因很多,而且很隐蔽,其引起连接错误的原因很多,而且很隐蔽,其错误信息也不如编译时给出的直接、具体。错误信息也不如编译时给出的直接、具体。因此连接时的错误要比编译错误更难查找需因此连接时的错误要比编译错误更难查找需要仔细分析判断而且对
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国船舶动力系统行业市场发展监测及投资方向研究报告
- 激光癌症诊断仪项目投资可行性研究分析报告(2024-2030版)
- 2023-2029年中国粗粮饼干行业发展监测及投资前景展望报告
- 2025年 锅炉水处理作业G3证考试练习题附答案
- 2025年中国无花果行业市场调研分析及投资战略咨询报告
- 2025年 扶风县职业教育中心招聘考试笔试试题附答案
- 2023-2028年中国制造执行系统行业发展前景预测及投资战略咨询报告
- 2025年中国导爪行业市场发展前景及发展趋势与投资战略研究报告
- 红薯系列产品加工项目可行性研究报告
- 中国高端礼品酒行业市场全景分析及发展趋势预测报告
- 橡胶生产企业设备设施及作业活动风险分级管控清单
- 连带责任担保借条(四篇)
- 2023年计算机图形学试题级考试A卷
- GB/T 42104-2022游乐园安全安全管理体系
- 八年级下册人教版英语单项选择(50题)练习题含答案含答案
- 河北省大众滑雪等级标准(试行)
- GB/T 3863-2008工业氧
- GB/T 31125-2014胶粘带初粘性试验方法环形法
- 班主任班级管理(课堂)课件
- 学院辅导答疑情况记录表
- 31个级地区国家重点监控企业自行监测信息公开平台及污染源监督性监测信息公开网址
评论
0/150
提交评论