zoukankan      html  css  js  c++  java
  • Debug格式化输出----基于C语言

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

    1. 使用宏实现

    举例:

    #include <stdio.h>
    
    #define ECHO_COLOR_NONE         "33[0;0m"
    #define ECHO_COLOR_GREEN        "33[0;32m"
    
    #define debug(fmt, args...)     
              printf(ECHO_COLOR_GREEN"Debug: " fmt "(file: %s, func: %s, line: %d)
    "ECHO_COLOR_NONE, ##args, __FILE__, __func__, __LINE__);
    
    // 测试程序
    int main(void)
    {
         int data = 10;
    
         debug("This is a test, data = %d", data);
         printf("OK
    ");
    
         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         "33[0;0m"
    #define ECHO_COLOR_GREEN        "33[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)
    "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
    ");
    
         return 0;
    }
    

    小结

    通过以上两种方法就可以实现用debug输出含有位置信息的调试信息。

  • 相关阅读:
    Oracle中快速查找锁与锁等待
    Oracle查看、修改连接数
    内置数据类型
    代码片段一
    设计模式学习四:依赖倒置原则
    队列
    设计模式学习六:代理模式
    linux 自学系列:一直kill掉多个进程
    设计模式学习五:装饰器模式
    通过__metaclass__为类动态增加方法实例
  • 原文地址:https://www.cnblogs.com/microxiami/p/8027001.html
Copyright © 2011-2022 走看看