Debug格式化輸出----基於C語言
1. 使用宏實現
舉例:
#include <stdio.h>
#define ECHO_COLOR_NONE "\033[0;0m"
#define ECHO_COLOR_GREEN "\033[0;32m"
#define debug(fmt, args...) \
printf(ECHO_COLOR_GREEN"Debug: " fmt "(file: %s, func: %s, line: %d)\n"ECHO_COLOR_NONE, ##args, __FILE__, __func__, __LINE__);
// 測試程序
int main(void)
{
int data = 10;
debug("This is a test, data = %d", data);
printf("OK\n");
return 0;
}
2. 使用函數實現
在實現過程中要用到幾個關鍵宏:
#include <stdarg.h>
va_list argp;
va_start(argp, fmt);
va_end(argp);
要用到vsnprintf()函數
vsnprintf()
頭文件:#include <stdarg.h>
函數原型:int vsnprintf(char *str, size_t size, const char *format, va_list ap);
函數說明:將可變參數格式化輸出到一個字符數組
舉例:
#include <stdio.h>
#include <stdarg.h>
#define ECHO_COLOR_NONE "\033[0;0m"
#define ECHO_COLOR_GREEN "\033[0;32m"
#define debug_print(message, ...) debug_msg(message, __FILE__, __func__, __LINE__, ##__VA_ARGS__)
void debug_type(char *fmt, char *file, const char *func, int line, va_list argp)
{
char buffer[128] = { 0 };
vsnprintf(buffer, sizeof(buffer), fmt, argp);
printf(ECHO_COLOR_GREEN"Debug: %s(file: %s, func: %s, line: %d)\n"ECHO_COLOR_NONE, buffer, file, func, line);
}
void debug_msg(char *fmt, char *file, const char *func, int line, ...)
{
va_list arg_list;
va_start(arg_list, line);
debug_type(fmt, file, func, line, arg_list);
va_end(arg_list);
}
// 測試程序
int main(void)
{
int data = 10;
debug_print("This is a test, data = %d", data);
printf("OK\n");
return 0;
}
小結
通過以上兩種方法就可以實現用debug輸出含有位置信息的調試信息。