陪安东尼小说结局:c语言调试技巧总结

来源:百度文库 编辑:九乡新闻网 时间:2024/05/01 14:44:55

c语言调试技巧总结  

2007-12-31 20:38:19|  分类: 编程资料 |  标签: |字号大中小 订阅

经过这么多程序的编辑与调试,需要总结一些经验,以免在以后的调试中乃中当初无知的起点出发开始摸索!在整个程序编辑完毕并通过编译后,对各个函数进行调试.

   首先用一组简单的数据对程序进行调试,是否各函数有出错现象.然后用复杂数据对程序进行调试.直到确定程序对正常数据没有错误为止.

   第二,当数据测试时,程序错误,要首先找到出错的函数,对函数中各个变量进行观察,有时变量很多,循环多重不要急,对各个数据的观察,对程序的调试有很大的帮助.你也可以,先对几个变量熟悉后,在多重循环里,确定正确的数据,将其跳过调试.对有疑问的数据循环进行仔细观察.虽然这是比较省力气的活,但对复杂的数据错误并不是很有效.所以仔细观察每个数据的变化对调试的成功与否有决定性作用!

   第三,测试时,根本的错误并不一定在运行错误的函数内,或许在前面的函数内已经奠定了这些错误数据的基础,需要反过头来,对所有的的函数进行一项项的调试!从程序运行的第一个函数开始调试.按照程序运行的步骤下去.一个个的确定函数的正确性,每确定一个函数,在以后的调试中可以减少对该函数的调试次数,或者直接跳到下一个函数.所谓的各个击破便是如此.对头文件中的各个函数的返回值和它所要传入的参变量及其功能更是需要注意.

   第四,调试时,需要对错误缩小范围,从整个程序到指定函数,再到指定区域,再到指定行,在对程序缩小范围或对编译没通过的程序缩小错误范围时可以用"/* */"来进行调试,确定正常范围,缩小错误范围.

   本次总结,主要是对C语言初级编程的总结,写下自己的体会,有不妥的地方希望

高手能及时提出,在此受小弟一拜!!

   下面是一个高手对程序调试技巧的编写,现在对第2,3两点还没接触但还是贴一下

希望大家有所受益.

   了解调试,首先要知道"断点"这个概念.断点就是程序运行中可能会中断的地方,方便开发者在程序运行的过程中查看程序当前的运行状态,比如变量的值,函数的返回值等等.究竟怎么使用断点呢?
1.F9在当前光标所在的行下断点,如果当前行已经有断点,则取消断点.
  F5调试状态运行程序,程序执行到有断点的地方会停下来.
  F10单步执行程序.
  CTRL+F10运行到光标所在行.
  F11和F10的区别是,如果当前执行语句是函数调用,则会进入函数里面.
  SHIFT+F11跳出当前所在函数.

特别说明:
  a.有的地方不能下断点.比如空行,基本类型定义语句(不初始化),等等非执行语句.比如
int i;  // 此行不能下断点
int j=0;// 这里可以下
CStringstr;// 这里可以下
intk = Max(i,j);// 这里可以下
  b.不是所有断点都会(断).比如下断点的语句在程序里面没有被执行.
  c.此外,ALT+F9还可以下条件断点,不过这个不常用,有兴趣的可以自己研究:)

2.如何调试Release版的程序?
  有些程序在debug下运行的很好,但在release下却总是失败,默认情况下release是不能调试的. 怎么解决呢?
  其实"debug"和"release"都只是一个代号而已,各自对应一组不同的编译选项.
  在release的默认设置下,ALT+F7 ,调出工程设置对话框,切换到link选项卡,勾选"Generate debug info",然后再切换到C/C++选项卡,在"Optimizations"里面选"Disable(Debug)",在下面的"Debug info"里面选" Program Database for Edit and Continue".然后点OK保存设置,重新编译程序,下断点即可.
3.上面两点已经能应付很多种情况了,但是有时候即使在debug下也不能下断点,我以前也曾经遇到过这种问题,一个调了4层的dll,就是不能下断点.其实还除了上面的方法,还有一种最底层的实现技术:使用汇编.
  细心的人可能会发现,有时候在调试状态下当程序出现异常的时候,光标会指向汇编代码,而这个代码就是int 3,这其实是一个中断.
  在你的代码的任意地方加上
  __asm{
  int 3
};
  用debug编译,然后直接运行程序.当程序执行到上述代码的时候,就会出现一个框,告诉你说一大堆信息,说程序错了,下面有"调试"、"终止"、"忽略",不用理,点调试就可以进入跟 踪了。