以为好像发过,没找到。所以重新写一下。技术说明:
- 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