调试技巧

 

1.调试标记

为了避免在bug找到后,要删除调试代码,我们可以利用预处理器的选择编译功能,在需要调试时,将编译“开关”打开,故障解除后,将编译“开关”关闭。这样编译器在编译文件的时候,不会把不需要的调试代码编译成目标代码,减少了目标文件的大小。这里所说的“开关”就是起到一个调试标记的作用,常用的标识名是:DEBUG(注意,不能使用NDEBUG,这是C中的保留字)

 

#define DEBUG
#ifdef  DEBUG 
//需要调试的代码
#endif

2.把变量和表达式转换成字符串

 

在调试程序的过程中,往往需要输出一些变量和表达式的值,常规的方法可以这样实现:

 

cout<<"i="<<i<<endl;
cout<<"a+b="<<a+b<<end;

下述方法可能使代码更简洁:

1 #include <iostream>
2 #define PR(E) cout<<#E<<E<<endl
3 using namespace std;
4 int main(void)
5 {
6      PR(i);
7      PR(a+b);
8      return 0;
9 }

 

3.C语言的assert()宏

 

assert()是c语言中定义的一个调试宏,在C中的头文件是 <assert.h>,C++中的头文件是<cassert>

 

当使用assert()时,给它传递一个参数,该参数是一个表示某个断言为真的表达式。预处理器会产生代码去判断这个断言的真假。如果断言为假,则发出一个错误信息告诉断言是什么并且终止程序

//#define NDEBUG
#include<cassert>
int main()
{
        int i=100;
        assert(i!=100);
}

允许结果:

如果调试结束,可以在assert()宏前面插入#define NDEBUG 结束调试 

 

 

 

posted @ 2012-08-08 11:10  llkkyy  阅读(948)  评论(0编辑  收藏  举报