六石编程学:方便调试输出的标准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代码的主要内容,如果未能解决你的问题,请参考以下文章