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

Posted 柳鲲鹏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了六石编程学:方便调试输出的标准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

以上是关于六石编程学:方便调试输出的标准C代码的主要内容,如果未能解决你的问题,请参考以下文章

六石编程学:要学会还原代码

六石编程学:如何整合两个项目的代码

六石编程学:关于代码,有六个得意

六石编程学:代码会说话的两层含义

六石编程学:代码会说话的两层含义

六石编程学:相同的安装代码,你猜有多少套?