自定义的用于C语言的TRACE和DUMP
作者: 王者之剑(http://www.albertsong.com/) 日期: 2008-03-23 23:03
关键词:C语言 调试
1.C语言调试时,可能需要用printf打印调试信息,但是又不希望在release版本中起作用。
a)最不可取的作法,先写着,然后Release时注释掉。
b)在打印调试信息的地方
#ifdef _DEBUG
printf(...) ;
#endif
c)比较好的做法,使用宏定义
#ifdef _DEBUG
#define TRACE printf
#else
#define TRACE 1?(void)0:printf
#endif
2.调试时,可能还想打印出一个变量的内存二进制值(用十六进制表示),这时可以定义一个dump函数,然后对这个函数使用上面的宏。
#ifdef _DEBUG
#define DUMP dump
#else
#define DUMP 1?(void)0:dump
#endif
void dump(unsigned char *p, size_t len)
{
}
完整的代码如下:
debug.h
TestDebug.c
参考链接:
http://www.hcn.zaq.ne.jp/no-ji/lib/assert.txt
http://oshiete1.goo.ne.jp/qa100283.html
http://zh.wikipedia.org/wiki/ASCII
1.C语言调试时,可能需要用printf打印调试信息,但是又不希望在release版本中起作用。
a)最不可取的作法,先写着,然后Release时注释掉。
b)在打印调试信息的地方
#ifdef _DEBUG
printf(...) ;
#endif
c)比较好的做法,使用宏定义
#ifdef _DEBUG
#define TRACE printf
#else
#define TRACE 1?(void)0:printf
#endif
2.调试时,可能还想打印出一个变量的内存二进制值(用十六进制表示),这时可以定义一个dump函数,然后对这个函数使用上面的宏。
#ifdef _DEBUG
#define DUMP dump
#else
#define DUMP 1?(void)0:dump
#endif
void dump(unsigned char *p, size_t len)
{
}
完整的代码如下:
debug.h
下载: debug.h
- /*
- *debug.h
- *by Albert Song(http://www.albertsong.com)
- */
- #ifndef _DEBUG_H_
- #define _DEBUG_H_
- #include <stdio.h>
- #ifdef _DEBUG
- #define TRACE printf
- #define DUMP dump
- #else
- #define TRACE 1?(void)0:printf
- #define DUMP 1?(void)0:dump
- #endif
- #define BYTE_IN_ROW 40
- #ifdef __cplusplus
- extern "C" {
- #endif
- void dump(unsigned char *p, size_t len)
- {
- unsigned int i=0;
- for(i=0;i<len;i++)
- {
- printf("%02X ",*p++);
- if((i+1)%BYTE_IN_ROW==0) printf("\n");
- }
- printf("\n");
- }
- #ifdef __cplusplus
- }
- #endif
- #endif //_DEBUG_H
TestDebug.c
下载: TestDebug.c
- /*
- *TestDebug.c
- *by Albert Song(http://www.albertsong.com)
- */
- #include <string.h>
- #include "debug.h"
- int main(void)
- {
- int a=256;
- char b[]="JKLMN";
- char c;
- TRACE("info a=%d,b=%s\n",a,b);
- TRACE("info b2=%.*s\n",2,b);
- DUMP((unsigned char*)&a,sizeof(a));
- DUMP((unsigned char*)b,strlen(b));
- //end
- printf("Press any key to continue...");
- scanf("%c",&c);
- return 0;
- }
参考链接:
http://www.hcn.zaq.ne.jp/no-ji/lib/assert.txt
http://oshiete1.goo.ne.jp/qa100283.html
http://zh.wikipedia.org/wiki/ASCII
评论: 0 |
引用: 0 |
阅读: 441
显示Tag关联文章
合并lib文件及obj文件的方法 (2008-03-26 21:50)
发表评论
订阅
上一篇
返回
下一篇









