一个简单的消除调试打印方法
2007-07-12 21:17
381 查看
我的工程都是在终端上运行,用C语言实现,调试时有很多打印信息,一开始也没有注意,现在准备把软件正式发布的时候,才发现这么printf屏蔽掉也是件麻烦的事情,或者用#ifdef DEBUG这个太烦,或者你查找printf并替换成//printf。这样的有点不安全,比如如果是printf与}此类括号写在一起的就会出错,当然一般是不会这么写的。
我所做的是首先写一个my_printf(...)的函数,具体实现如下:
#include <stdarg.h>
#define DEBUG 0
inline static void my_printf(char* format,...)
...{
#ifdef DEBUG
va_list ap;
va_start(ap, format);
vprintf(format, ap);
va_end(ap);
#endif
}
你只要把上面这个函数的定义放在某个头文件里,然后让所有调用printf的源文件都包含这个头文件就可以了。
然后把工程里面所有包含printf的函数都替换成my_printf(注意你的工程中是否有其他还有printf字符串的变量或函数,我这里只屏蔽掉了fprintf),用shell 实现:
sed -i "s/printf/my_printf/g" `grep [^f]printf -rl .'
好了,如果你不想有打印信息,只要把#define DEBUG 0 注释掉就可以了,不会增加任何目标代码。
我所做的是首先写一个my_printf(...)的函数,具体实现如下:
#include <stdarg.h>
#define DEBUG 0
inline static void my_printf(char* format,...)
...{
#ifdef DEBUG
va_list ap;
va_start(ap, format);
vprintf(format, ap);
va_end(ap);
#endif
}
你只要把上面这个函数的定义放在某个头文件里,然后让所有调用printf的源文件都包含这个头文件就可以了。
然后把工程里面所有包含printf的函数都替换成my_printf(注意你的工程中是否有其他还有printf字符串的变量或函数,我这里只屏蔽掉了fprintf),用shell 实现:
sed -i "s/printf/my_printf/g" `grep [^f]printf -rl .'
好了,如果你不想有打印信息,只要把#define DEBUG 0 注释掉就可以了,不会增加任何目标代码。
相关文章推荐
- android java 打印调用堆栈的一个简单方法
- 介绍一个简单的打印机打印方法
- 一个简单的用于嵌入式Linux开发的C调试日志打印接口
- ReportMachine 控制打印走纸的一个简单方法
- VS2010中asp.net调试.ashx程序错误的一个简单方法!
- 一个简单实用的ASP调试函数和使用方法
- 1.编写一个简单的C语言程序:根据输入的两个整数求平均值并且在终端输出,通过gcc编译器得到它的汇编程序文件。 2.编写一个C语言程序:打印输出所有“水仙花数”,用gdb调试程序(给出步骤)。所谓“
- 1.编写一个简单的C语言程序:根据输入的两个整数求平均值并且在终端输出,通过gcc编译器得到它的汇编程序文件。 2.编写一个C语言程序:打印输出所有“水仙花数”,用gdb调试程序(给出步骤)。所谓“
- 一个简单的打印监控示例
- 一个简单的子类继承父类公共方法的代码
- 推荐一个简单易行的密码管理方法
- 比较简单的一个符合web标准的JS调用flash方法
- 让xocde4.2能够成功联机调试IOS5.1系统,最新最简单方法!
- Struts2框架调试时,控制台打印输出大量<mime-mapping>相关信息,解决方法
- Excel:一个连接文本的简单的方法
- ios(iphone/ipad)一个简单的用代码判断当前设备的方法
- 倒序打印的聪明递归方法~当然也可以使用堆栈法和最简单易懂的循环法
- delphi程序只允许运行一个实例的简单方法:
- IE9无法调试Javascript的一个解决方法
- 一个简单行列转化问题的简单解决方法。