程序调试和程序排错_第1页
程序调试和程序排错_第2页
程序调试和程序排错_第3页
程序调试和程序排错_第4页
程序调试和程序排错_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

总结:1)量化2)构建组织,把研发人员和技术管理体系分清楚。技术管理体系的结构、工作内容、流程、输出。3)培训:对象以岗位为目标4)项目支持:分清R&D体系和业务体系的职责,包括按时间段划分的职责5)业务线整合:时间6)DB:需细化,立项、完成时间,何时立项,转到项目控制体系7)论文8)专利:跟踪和关注Neusoft

Group

Ltd.Date:

5/24/2021程序调试与程序排错IA事业部Neusoft

Group

Ltd.Date:

5/24/2021课程主要内容程序调试方法程序排错方法程序排错举例问题与习题Neusoft

Group

Ltd.Date:

5/24/2021第一部分程序排错方法Neusoft

Group

Ltd.Date:

5/24/2021主要内容1.1程序调试技巧_VC1.2排错准备1.3排查过程实例Neusoft

Group

Ltd.Date:

5/24/20211.1 程序调试技巧_VC(1)设置断点(F9)在当前光标所在的行下断点,如果当前行已经有断点,则取消断点;F5调试状态运行程序,程序执行到有断点的地方会停下来;通过ALT+F9还可以下设置条件断点;

注意,并不是所有断点都会停;比如被设置断点的语句在程序里面没有被执行;单步执行(F10)单步执行程序;CTRL+F10运行到光标所在行;单步执行深入函数内部(F11)如果当前执行语句是函数调用,则会进入函数里面;SHIFT+F11跳出当前所在函数;通过Memory了解指定内存地址内存储的内容通过CallStack了解上级(父)函数内部信息,包括变量数值……Neusoft

Group

Ltd.Date:

5/24/20211.1 程序调试技巧_VC(2)通过打印信息排错

如果VC提供的调试手段还不能符合需要,可以尝试打印信息的方式;在需要输出信息的地方写上printf(“??????”);打印可以根据需要输出信息;打印信息可以长期保存,便于他人参与分析和讨论;Neusoft

Group

Ltd.Date:

5/24/20211.2

排查准备(1)排查的立足点

发现问题,首先要怀疑是自己的问题,而不是抱怨编译系统、或者程序库、或者除了他们的代码之外的其他任何东西;

排错必须从结果出发,逆向思考,去发现原因。一旦有了一个完全的解释,我们就知道如何去更正了;看看程序垮台前已经有了什么样的输出如果可能的话,看看堆栈轨迹(callstack)排查思路如果有明显的线索寻找熟悉的模式检查最近的改动。错误很可能就在新的代码里,或者是由于这些改动而暴露出来不要两次犯同样的错误。当你改正了一个错误后,应该问问自己是否在程序里其他地方也犯过同样错误现在排除,而不是以后。在急忙中需要处理的事情太多,也可能造成其他损害。在任何一次程序垮台时都不要忽视它,应该立即对它进行跟踪,因为它可能不

会再现,直到一切都变得太晚了Neusoft

Group

Ltd.Date:

5/24/20211.2

排查准备(2)现在排除,而不是以后。在急忙中需要处理的事情太多,也可能造成其他损害。在任何一次程序垮台时都不要忽视它,应该立即对它进行跟踪,因为它可能不

会再现,直到一切都变得太晚了取得堆栈轨迹(callstack)非常仔细地阅读代码,仔细想一段时间,但是不要急于去做修改把你的代码解释给别人,让有经验的人分析如果有明显的线索把错误弄成可以重现的第一步应该是设法保证你能够使错误按自己的要求重现如果无法把错误弄成每次都出现的,那么就应该设法弄清为什么做不到。即使你无法保证错误每次都出现,如果你能减少等待它出现的时间,也就能够更快地找到它。如果一个程序提供了排错输出,那么就应该打开它分而治之设法构造出最小的又能保证错误现身的输入,这样可以减少可能性采用二分检索的方式Neusoft

Group

Ltd.Date:

5/24/20211.2

排查准备(3)研究错误的计数特性显示输出,使搜索局部化写自检测代码如果需要更多的信息,你可以写自己的检查函数去测试某些条件、打印出相关变量的值或者终止程序写出一些例行程序,让它们对数据结构或其他信息做在线的一致性检查写记录文件。以某种固定格式写出一系列的排错输出画一个图。在测试和排错中,有时图形比文字更加有效保留记录。如果查找某个错误的过程花了一定时间,你可能就要开始忘记试验过的情况和已经学到的东西了。Neusoft

Group

Ltd.Date:

5/24/20211.3

排查过程实例(1)利用VC的Debug工具进行调试关于A程序的功能详细说明见

word文档。关于A程序代码请参见a.c文件。阅读运行方法:选中文件 “a.c”图标,,右键

Copy 粘贴到指定的文件夹

打开。需要排查的问题问题1:程序里面存在一个错 误,导致程序运行不能结束, 请排除;问题2:排除问题1后,程序输 出结果如下:11

34

33

32

1230

29

28

27

2625

24

35

22

2120

19

18

17

1613

14

23

31

13结果仍不正确,请继续排查;Neusoft

Group

Ltd.Date:

5/24/20211.3

排查过程实例(2)分析步骤程序现状如下图,程序陷于死循环状态。Neusoft

Group

Ltd.Date:

5/24/20211.3

排查过程实例(3)出发点看代码可能会找到原因,但是非常耗时;对于这个问题,不是很适用。利用VC的Debug工具VC提供了很多Debug的工具,如设置断点(F9)、单步执行(F10)…详细参见《IA_VC++&&MSDN的使用》对于死循环的程序,可以通过菜单中Debug

Break(方式如图),来暂停程序。Neusoft

Group

Ltd.Date:

5/24/20211.3

排查过程实例(4)暂停后的程序如图。Neusoft

Group

Ltd.Date:

5/24/20211.3

排查过程实例(5)问题的原因通过F10单步执行,你会发现程序这个循环(上图)中出不来了。原因是变量j在循环体内被误修改(如下),导致死循环。if

((j

=

min1)

||

(j

==

min2)

)….这就是导致问题的原因,判断符号被误写成赋值符号,多么惨痛的教训!!!继续将if((j

=min1)||(j==min2))修改if((j

==min1)||(j==min2))后,继续执行程序,可以得到如下的输出:11

34

33

32

1230

29

28

27

2625

24

35

22

2120

19

18

17

1613

14

23

31

13这个结果仍不正确,需要继续调查。请各位利用VC的Debug工具解决这个问题。Neusoft

Group

Ltd.Date:

5/24/2021第二部分问题与习题Neusoft

Group

Ltd.Date:

5/24/2021问题表Q1:如何设置断点、取消断点?Q2:如何设

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论