C语言建造自己的调试信息系统
2017-01-04 15:50
621 查看
直接看代码
1: soc_cm_debug(DK_ERR, ("Port %s: soc_link_fwd_set failed: %s\n SOC_PORT_NAME(unit, port), bcm_errmsg(rv)));
DK_ERR: 可以这样设置, 全局静态变量 my_debug可以设置标志位,不同级别的调试信息。如下:
#define DK_ERROR 0x00000001
#define DK_WARN 0x00000002
#define soc_cm_debug(x,y) \
If(my_debug & x) printf y
如果条件成立,才进行打印
#define bcm_errmsg(rv) \
_SHR_ERRMSG(rv)
#define _SHR_ERRMSG(r) \
_shr_errmsg[(((int)r) <= 0 && ((int)r) > _SHR_E_LIMIT) ? -(r) : -_SHR_E_LIMIT]
错误信息数组
/*rv 的值*/
typedef enum {
_SHR_E_NONE = 0,
_SHR_E_INTERNAL = -1,
_SHR_E_MEMORY = -2,
_SHR_E_UNIT = -3,
_SHR_E_PARAM = -4,
_SHR_E_EMPTY = -5,
_SHR_E_FULL = -6,
_SHR_E_NOT_FOUND = -7,
_SHR_E_EXISTS = -8,
_SHR_E_TIMEOUT = -9,
_SHR_E_BUSY = -10,
_SHR_E_FAIL = -11,
_SHR_E_DISABLED = -12,
_SHR_E_BADID = -13,
_SHR_E_RESOURCE = -14,
_SHR_E_CONFIG = -15,
_SHR_E_UNAVAIL = -16,
_SHR_E_INIT = -17,
_SHR_E_PORT = -18,
_SHR_E_LIMIT = -19 /* Must come last */
} _shr_error_t;
char *_shr_errmsg[] = _SHR_ERRMSG_INIT;
/*定义自己的系统功能出错类别*/
#define _SHR_ERRMSG_INIT { \
"Ok", /* E_NONE */ \
"Internal error", /* E_INTERNAL */ \
"Out of memory", /* E_MEMORY */ \
"Invalid unit", /* E_UNIT */ \
"Invalid parameter", /* E_PARAM */ \
"Table empty", /* E_EMPTY */ \
"Table full", /* E_FULL */ \
"Entry not found", /* E_NOT_FOUND */ \
"Entry exists", /* E_EXISTS */ \
"Operation timed out", /* E_TIMEOUT */ \
"Operation still running", /* E_BUSY */ \
"Operation failed", /* E_FAIL */ \
"Operation disabled", /* E_DISABLED */ \
"Invalid identifier", /* E_BADID */ \
"No resources for operation", /* E_RESOURCE */ \
"Invalid configuration", /* E_CONFIG */ \
"Feature unavailable", /* E_UNAVAIL */ \
"Feature not initialized", /* E_INIT */ \
"Invalid port", /* E_PORT */ \
"Unknown error" /* E_LIMIT */ \
}
简单设计添加到自己代码中即可实现,问题原因的定位,查看函数返回值的问题情况
一个小例子如下:
#include <stdio.h>
#define MYDEBUG(X,Y) \
if(X & TEST) printf Y
static int TEST = 1;
char *mymsg[] = {"one","two","three"};
enum LISTM{
DEBUG_1,
DEBUG_2,
DEBUG_3
};
int main()
{
MYDEBUG(1,("MYTEST:%s\n",mymsg[DEBUG_1]));
MYDEBUG(0,("MYTEST:%s\n",mymsg[DEBUG_2]));
return 0;
}
1: soc_cm_debug(DK_ERR, ("Port %s: soc_link_fwd_set failed: %s\n SOC_PORT_NAME(unit, port), bcm_errmsg(rv)));
DK_ERR: 可以这样设置, 全局静态变量 my_debug可以设置标志位,不同级别的调试信息。如下:
#define DK_ERROR 0x00000001
#define DK_WARN 0x00000002
#define soc_cm_debug(x,y) \
If(my_debug & x) printf y
如果条件成立,才进行打印
#define bcm_errmsg(rv) \
_SHR_ERRMSG(rv)
#define _SHR_ERRMSG(r) \
_shr_errmsg[(((int)r) <= 0 && ((int)r) > _SHR_E_LIMIT) ? -(r) : -_SHR_E_LIMIT]
错误信息数组
/*rv 的值*/
typedef enum {
_SHR_E_NONE = 0,
_SHR_E_INTERNAL = -1,
_SHR_E_MEMORY = -2,
_SHR_E_UNIT = -3,
_SHR_E_PARAM = -4,
_SHR_E_EMPTY = -5,
_SHR_E_FULL = -6,
_SHR_E_NOT_FOUND = -7,
_SHR_E_EXISTS = -8,
_SHR_E_TIMEOUT = -9,
_SHR_E_BUSY = -10,
_SHR_E_FAIL = -11,
_SHR_E_DISABLED = -12,
_SHR_E_BADID = -13,
_SHR_E_RESOURCE = -14,
_SHR_E_CONFIG = -15,
_SHR_E_UNAVAIL = -16,
_SHR_E_INIT = -17,
_SHR_E_PORT = -18,
_SHR_E_LIMIT = -19 /* Must come last */
} _shr_error_t;
char *_shr_errmsg[] = _SHR_ERRMSG_INIT;
/*定义自己的系统功能出错类别*/
#define _SHR_ERRMSG_INIT { \
"Ok", /* E_NONE */ \
"Internal error", /* E_INTERNAL */ \
"Out of memory", /* E_MEMORY */ \
"Invalid unit", /* E_UNIT */ \
"Invalid parameter", /* E_PARAM */ \
"Table empty", /* E_EMPTY */ \
"Table full", /* E_FULL */ \
"Entry not found", /* E_NOT_FOUND */ \
"Entry exists", /* E_EXISTS */ \
"Operation timed out", /* E_TIMEOUT */ \
"Operation still running", /* E_BUSY */ \
"Operation failed", /* E_FAIL */ \
"Operation disabled", /* E_DISABLED */ \
"Invalid identifier", /* E_BADID */ \
"No resources for operation", /* E_RESOURCE */ \
"Invalid configuration", /* E_CONFIG */ \
"Feature unavailable", /* E_UNAVAIL */ \
"Feature not initialized", /* E_INIT */ \
"Invalid port", /* E_PORT */ \
"Unknown error" /* E_LIMIT */ \
}
简单设计添加到自己代码中即可实现,问题原因的定位,查看函数返回值的问题情况
一个小例子如下:
#include <stdio.h>
#define MYDEBUG(X,Y) \
if(X & TEST) printf Y
static int TEST = 1;
char *mymsg[] = {"one","two","three"};
enum LISTM{
DEBUG_1,
DEBUG_2,
DEBUG_3
};
int main()
{
MYDEBUG(1,("MYTEST:%s\n",mymsg[DEBUG_1]));
MYDEBUG(0,("MYTEST:%s\n",mymsg[DEBUG_2]));
return 0;
}
相关文章推荐
- C语言中几种输出调试信息的方法
- 用 Java 一步一步建造自己的聊天室软件(第一话) (Yinyin)
- 自己建造客户区域
- 看使用 GetStartupInfo 检查自己是否被"调试"
- 几道C语言题目,有兴趣的可以自己动手试试
- ASP.net中引用自己的类库为什么不出现智能提示?VS.net中怎么样在客户端调试服务器中的存储过
- 自己写的成绩管理系统(c语言实现)
- 学习人家的C语言面试题,提高自己C语言基础能力。
- 自己建造的房子
- 自己学习C语言的一点心得
- C语言的故事:自己没有想象中那么狠
- 在VC里调试标准C语言
- C语言的调试-数组(21)
- 自己写的日期相加函数(C语言)
- 计划建造一个 自己的 BBS 系统, 完全采用 Web 标准 设计.
- c语言输出自己源代码和反源代码
- 为自己用,写的一简单文件同步程序(vs2003调试通过)
- c语言调试技巧
- 补上上篇日志说的DES算法Source,C语言写的,基本功能,有兴趣的自己改吧
- 自己编写BuildProvider来实现ORM以及BuildProvider的调试