- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
IA_排错
沈阳东软软件股份有限公司 NEU-APN IA事业部 (机密) 程序调试与程序排错 IA 事业部 课程主要内容 程序调试方法 程序排错方法 程序排错举例 问题与习题 主要内容 1.1 程序调试技巧_VC 1.2 排错准备 1.3 排查过程实例 1.1 程序调试技巧_VC(1) 设置断点(F9) 在当前光标所在的行下断点,如果当前行已经有断点,则取消断点; F5调试状态运行程序,程序执行到有断点的地方会停下来; 通过ALT+F9还可以下设置条件断点; 注意,并不是所有断点都会停;比如被设置断点的语句在程序里面没有被执行; 单步执行(F10) 单步执行程序; CTRL+F10运行到光标所在行; ? 单步执行深入函数内部(F11) 如果当前执行语句是函数调用,则会进入函数里面; SHIFT+F11跳出当前所在函数; 通过Memory了解指定内存地址内存储的内容 通过CallStack了解上级(父)函数内部信息,包括变量数值…… 1.1 程序调试技巧_VC(2) 通过打印信息排错 如果VC提供的调试手段还不能符合需要,可以尝试打印信息的方式;在需要输出信息的地方写上printf(“??????”); 打印可以根据需要输出信息; 打印信息可以长期保存,便于他人参与分析和讨论; 1.2 排查准备(1) 排查的立足点 发现问题,首先要怀疑是自己的问题,而不是抱怨编译系统、或者程序库、或者除了他们的代码之外的其他任何东西; 排错必须从结果出发,逆向思考,去发现原因。一旦有了一个完全的解释,我们就知道如何去更正了; 看看程序垮台前已经有了什么样的输出 如果可能的话,看看堆栈轨迹(callstack) 排查思路 如果有明显的线索 寻找熟悉的模式 检查最近的改动。错误很可能就在新的代码里,或者是由于这些改动而暴露出来 不要两次犯同样的错误。当你改正了一个错误后,应该问问自己是否在程序里其他地方也犯过同样错误 现在排除,而不是以后。在急忙中需要处理的事情太多,也可能造成其他损害。在任何一次程序垮台时都不要忽视它,应该立即对它进行跟踪,因为它可能不会再现,直到一切都变得太晚了 1.2 排查准备(2) 现在排除,而不是以后。在急忙中需要处理的事情太多,也可能造成其他损害。在任何一次程序垮台时都不要忽视它,应该立即对它进行跟踪,因为它可能不会再现,直到一切都变得太晚了 取得堆栈轨迹(callstack) 非常仔细地阅读代码,仔细想一段时间,但是不要急于去做修改 把你的代码解释给别人,让有经验的人分析 如果有明显的线索 把错误弄成可以重现的 第一步应该是设法保证你能够使错误按自己的要求重现 如果无法把错误弄成每次都出现的,那么就应该设法弄清为什么做不到。即使你无法保证错误每次都出现,如果你能减少等待它出现的时间,也就能够更快地找到它。 如果一个程序提供了排错输出,那么就应该打开它 分而治之 设法构造出最小的又能保证错误现身的输入,这样可以减少可能性 采用二分检索的方式 1.2 排查准备(3) 研究错误的计数特性 显示输出,使搜索局部化 写自检测代码 如果需要更多的信息,你可以写自己的检查函数去测试某些条件、打印出相关变量的值或者终止程序 写出一些例行程序,让它们对数据结构或其他信息做在线的一致性检查 写记录文件。以某种固定格式写出一系列的排错输出 画一个图。在测试和排错中,有时图形比文字更加有效 保留记录。如果查找某个错误的过程花了一定时间,你可能就要开始忘记试验过的情况和已经学到的东西了。 1.3 排查过程实例(1) 利用VC的Debug工具进行调试 关于A程序的功能详细说明见word文档。 关于A程序代码请参见a.c文件。 阅读运行方法:选中文件“a.c”图标,,右键?Copy?粘贴到指定的文件夹?打开。 需要排查的问题 问题1:程序里面存在一个错误,导致程序运行不能结束,请排除; 问题2:排除问题1后,程序输出结果如下: 11 34 33 32 12 30 29 28 27 26 25 24 35 22 21 20 19 18 17 16 13 14 23 31 13 结果仍不正确,请继续排查; 1.3 排查过程实例(2) 分析步骤 程序现状 如下图,程序陷于死循环状态。 1.3 排查过程实例(3) 出发点 看代码 可能会找到原因,但是非常耗时;对于这个问题,不是很适用。 利用VC的Debug工具 VC提供了很多Debug的工具,如设置断点(F9)、单步执行(F10)…详细参见《IA_VC++MSDN的使用》 对于死循环的程序,可以通过菜单中Debug?Break(方式如图),来暂停程序。 1.3 排查过程实例(4) 1.3 排查过程实例(5) 问题的原因 通过F10单步执行,你会
您可能关注的文档
- 800字爱国演讲稿(爱国,演讲稿)(精选篇)1.doc
- 80岁的爷爷生日贺词(精选篇)1.doc
- 80万吨年燃料乙醇工程项目可行性研究报告1.doc
- 80岁生日演讲稿1.doc
- 863项目建议书[最新版]1.doc
- 880中文说明书[最新版]1.doc
- 8月周末祝福语.doc
- 8歌词四首(二稿).doc
- 8点DIF-FFT算法的基于MATLAB的实现.docx
- 9.2北京令残疾人感到更“宜居”.doc
- 2025江浙沪居民睡眠健康小调研报告.pdf
- 毕业论文的开题报告范文.docx
- 团委活动方案(拓展).docx
- 汽车智能驾驶行业深度报告:端到端与AI共振,智驾平权开启新时代.pdf
- 小核酸行业深度:技术平台和适应症不断验证,迎来销售和临床密集兑现期-华福证券-2025.3.31-65页.docx
- 医药生物行业医疗AI专题报告二多组学篇AI技术驱动精准诊断实现重要突破-25031440页.docx
- CXO行业系列报告三寒冬已过行业需求逐步回暖-25031430页.docx
- 全国租赁市场报告2025年3月_可搜索.pdf
- 玩具行业“情绪经济”专题:创新玩法+IP赋能,重新定义玩具-华鑫证券-2025.docx
- 医疗保健行业PCAB抑制剂药物深度报告抑酸药物市场空间广阔PCAB抑制剂大有可为-25.pdf
文档评论(0)