六石编程学:方便调试输出的标准C代码

简介: 六石编程学:方便调试输出的标准C代码

以为好像发过,没找到。所以重新写一下。技术说明:

  • LOG系列是纯输出
  • DEBUG/FILE系列除了输出,还写入到文件


某些情况下输出看不到,或者不方便看,写入文件就是首选。

  • 具体用法

比如你要判断某个函数有没有走到,来一句LOG_HERE();,编译后再测试,就可以看到输出。非常的方便。

也可以改进一下,增加时间信息。

  • 具体代码
#ifndef FT_TS_LOG_FILE_NAME
#if defined(_WINDOWS) || defined(WIN32)
#define __FUNC__    __FUNCTION__
#define FT_TS_LOG_FILE_NAME               "D:\\tsfreetype.log"
#else
#define __FUNC__    __func__
#define FT_TS_LOG_FILE_NAME               "/tmp/tsfreetype.log"
#endif
#define LOG_TEXT_ONLY(FMT, ...) char log_text[4096] = {0}; \
                                sprintf(log_text, "%s-%d:" FMT "\n", __FUNC__, __LINE__, ##__VA_ARGS__); \
                                printf("%s", log_text); 
#define LOG_TO_OUTPUT(FMT, ...) {LOG_TEXT_ONLY(FMT, ##__VA_ARGS__)}
#define LOG_FORMAT(FMT, ...)    LOG_TO_OUTPUT(FMT, ##__VA_ARGS__)
#define LOG_TEXT(text)          LOG_TO_OUTPUT("%s", text)
#define LOG_FLOAT(value)        LOG_TO_OUTPUT("%f", value)
#define LOG_INT(value)          LOG_TO_OUTPUT("%d", value)
#define LOG_HERE()              LOG_TO_OUTPUT("");
#define LOG_TO_FILE(FMT, ...)   {LOG_TEXT_ONLY(FMT, ##__VA_ARGS__) \
                                {FILE* log_fp = fopen(FT_TS_LOG_FILE_NAME, "a+"); \
                fwrite(log_text, 1, strlen(log_text), log_fp); fclose(log_fp);}}
#define DEBUG_FORMAT(FMT, ...)  LOG_TO_FILE(FMT, ##__VA_ARGS__)
#define DEBUG_TEXT(text)        LOG_TO_FILE("%s", text)
#define DEBUG_FLOAT(value)      LOG_TO_FILE("%f", value)
#define DEBUG_INT(value)        LOG_TO_FILE("%d", value)
#define DEBUG_HERE()            LOG_TO_FILE("");
#define FILE_FORMAT             DEBUG_FORMAT
#define FILE_TEXT               DEBUG_TEXT
#define FILE_FLOAT              DEBUG_FLOAT
#define FILE_INT                DEBUG_INT
#define FILE_HERE               DEBUG_HERE
#endif
目录
相关文章
Labview 利用枚举编写一个计算工具
Labview 利用枚举编写一个计算工具
61 0
|
7月前
|
程序员 编译器 C语言
编程最重要的技术之一 — 调试(以C语言代码为例)
编程最重要的技术之一 — 调试(以C语言代码为例)
128 0
|
设计模式 传感器 API
在编写RTOS代码时,如何设计一个简单、优雅、可拓展的任务初始化结构?
在编写RTOS代码时,如何设计一个简单、优雅、可拓展的任务初始化结构?
151 0
|
Unix Linux 编译器
编写Linux设备驱动程序的注意事项
编写Linux设备驱动程序的注意事项
|
运维 Linux Go
嵌入式linux下的c语言日志log模块,功能增强(二)
嵌入式linux下的c语言日志log模块,功能增强(二)
|
程序员 C语言 C++
编程最重要的技术—调试(以C语言代码为例)
编程最重要的技术—调试(以C语言代码为例)
下一篇
DataWorks