调试输出技巧

我们在调试程序时总会想输出一些运行信息,通过它可以知道程序运行过程,方便查错。在windows中可以用集成开发环境单步运行,进入进出函数等,这些及其方便。但在linux中就没有这么方便了,虽然也可以用gcc单步运行,查看变量动态值。尤其在两种系统中开发驱动程序以上方面似乎就不行了,反正至今我也不知道。所以从linux的系统日志中获取灵感,可以将程序过程输出到指定的日志文件,通过查看日志可以知道程序的运行情况。基于此我们肯定要将变量值,提示信息输出到文件,就会遇到像printf(format,args...)这样的可变参数,因为输出的时候会有好几个变量。并且在发布程序的时候要将这些调试输出语句注释掉。每个地方都去处理显然太繁琐,如果一个程序上万行那么光注释这些语句就得花好多时间。linux提供了一种这样的宏的定义,可以大大节约开发时间。比如说宏可以这样定义:

#ifdef  WZWZ_DEBUG

#define WZWZ_OUTPUT(wzwz_file, format, args...) fprintf(wzwz_file, format, ##args)

#else

#define WZWZ_OUTPUT(wzwz_file, format, args...)

#endif

如果是调试版,就定义#define  WZWZ_DEBUG  1;

如果是发布版,就把上面的WZWZ_DEBUG定义一行注释。

这样的话你在程序需要输出的地方就加一句WZWZ_OUTPUT(wzwz_file, format, args...) ;它在调试的时候等同于文件输出语句fprintf(wzwz_file, format, ##args);在发布的时候就是空语句。是不是很方便。另外一种版本也可以

#ifdef  WZWZ_DEBUG

#define WZWZ_OUTPUT(wzwz_file, format, ...) fprintf(wzwz_file, format, ##__VA_ARGS__)

#else

#define WZWZ_OUTPUT(wzwz_file, format, args...)

#endif

 

舞者,无罪...

你可能感兴趣的:(调试输出技巧)