Debug格式化输出----基于C语言

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输出含有位置信息的调试信息。

时间: 2024-08-09 08:42:52

Debug格式化输出----基于C语言的相关文章

C语言格式化输出小结

函数说明 在gcc编程中,我们常用到的字符格式化输出函数是printf的,实际上gcc继承了C语言处理字符具有强大功能的风格,它提供了一系列的格式化输出函数,主要存在两个库函数文件stdio.h/ stdarg.h中,具体函数如下: #include <stdio.h> printf, int printf(const char *format, ...); fprintf, int fprintf(FILE *stream, const char *format, ...); sprintf

Python自动化--语言基础2--运算符、格式化输出、条件语句、循环语句、列表、元组

运算符包括:算术运算符.比较运算符.赋值运算符.逻辑运算符.成员运算符.身份运算符 算术运算符 %   取模(余数) //  取相除的整数部分 /   (5/2=2.5) 比较运算符 ==  等于 !=  不等于 <   小于 >   大于 <=  小于等于 >=  大于等于 1 if a==b: 2 print(1) 3 else: 4 print(2) 赋值运算符 a+=b   等于 a=a+b a-=b          a=a-b a*=b          a=a*b a

go语言基础之格式化输出

1.fmt包的格式化输出输入 格式说明 格式 含义 %% 一个%字面量 %b 一个二进制整数值(基数为2),或者是一个(高级的)用科学计数法表示的指数为2的浮点数 %c 字符型.可以把输入的数字按照ASCII码相应转换为对应的字符 %d 一个十进制数值(基数为10) %e 以科学记数法e表示的浮点数或者复数值 %E 以科学记数法E表示的浮点数或者复数值 %f 以标准记数法表示的浮点数或者复数值 %g 以%e或者%f表示的浮点数或者复数,任何一个都以最为紧凑的方式输出 %G 以%E或者%f表示的浮

go语言之数据类型和格式化输出

1.数据类型 package main import ( "fmt" "reflect" ) func main() { //整形 var v1 int32 v1 = 123 v2 := 64 fmt.Println(v1,v2,reflect.TypeOf(v2)) //123 64 int //浮点型 var f1 float32 f1 = 12 f2 := 12.0 fmt.Println(f1,f2,reflect.TypeOf(f2)) //12 12 f

使用shell+awk完成Hive查询结果格式化输出

好久不写,一方面是工作原因,有些东西没发直接发,另外的也是习惯给丢了,内因所致.今天是个好日子,走起! btw,实际上这种格式化输出应该不只限于某一种需求,差不多是通用的. 需求: --基本的:当前Hive查询结果存在数据与表头无法对其的情况,不便于监控人员直接查看,或者导出到excel中,需要提供一个脚本,将查询结果处理下,便于后续的查看或者操作. --额外的:A.每次查询出来的结果字段数.字段长度不固定:B.每个数据文件中可能包含不只一套查询结果,即存在多个schema. 想法: 对于基本需

中文分词实践(基于R语言)

背景:分析用户在世界杯期间讨论最多的话题. 思路:把用户关于世界杯的帖子拉下来,然后做中文分词+词频统计,最后将统计结果简单做个标签云,效果如下: 后续:中文分词是中文信息处理的基础,分词之后,其实还有特别多有趣的文本挖掘工作可以做,也是个知识发现的过程,以后有机会再学习下. ================================================== * 中文分词常用实现: 单机:R语言+Rwordseg分词包 (建议数据量<1G) 分布式:Hadoop+Smallse

【Python④】python恼人的字符串,格式化输出

恼人的字符串 计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.由于计算机是美国人发明的,因此,最早只有127个字母被编码到计算机里,也就是大小写英文字母.数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母a的编码是97. 但是要处理中文至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去.全世界有上百种语言,为了扩充ASCII编码,用于显示本国的语言,不同的国家和地区制定了不同的标准,由此产生

基于python语言的tensorflow的‘端到端’的字符型验证码识别源码整理(github源码分享)

基于python语言的tensorflow的‘端到端’的字符型验证码识别 1   Abstract 验证码(CAPTCHA)的诞生本身是为了自动区分 自然人 和 机器人 的一套公开方法, 但是近几年的人工智能技术的发展,传统的字符验证已经形同虚设. 所以,大家一方面研究和学习此代码时,另外一方面也要警惕自己的互联网系统的web安全问题. Keywords: 人工智能,Python,字符验证码,CAPTCHA,识别,tensorflow,CNN,深度学习 2   Introduction 全自动区

C++ cout 格式化输出方法

C语言里可以用printf(),%f来实现浮点数的格式化输出,用cout呢...? iomanip是I/O流控制头文件,就像printf的格式化输出一样. 以下是一些常用的: dec 置基数为10 相当于"%d"hex 置基数为16 相当于"%X"oct 置基数为8 相当于"%o"setfill(c) 设填充字符为csetprecision(n)   设显示小数精度为n位setw(n) 设域宽为n个字符setioflags(ios::fixed)