Colderleo's blog Colderleo's blog
首页
Linux
C++
Python
前端
工具软件
mysql
索引
关于
GitHub (opens new window)

Colder Leo

热爱代码的打工人
首页
Linux
C++
Python
前端
工具软件
mysql
索引
关于
GitHub (opens new window)
  • bug定位的一些情形
  • c++性能调优,可能的情况
  • total-编程知识点集锦
  • hpc_common.hpp
  • memory order 内存模型
  • 类型推导之auto-template-decltype
  • 完美转发forward源码分析
  • 左值和右值,右值引用、重载 std-move,引用折叠
  • cmake用法
  • alignas、alignof、sizeof实现内存对齐分配
  • 通过宏定义控制debug打印
    • 通过宏定义控制debug打印
    • 宏定义转字符串
  • 程序耗时性能测试
  • 线程池开源项目阅读
  • C++类中包含没有默认构造函数的成员
  • C++可变参数模板
  • C++属性继承 public protected private
  • C++智能指针
  • C++导出so的方法,以及extern C 注意事项
  • 四种spin lock
  • condition_variable和unique_lock
  • dpdk、kernel bypass
  • 智能网卡solarflare、Mellanox、X10等
  • 汇编寄存器和常见指令
  • c++ 类的静态成员变量未定义
  • C++获取类成员函数地址
  • preload示例
  • C++异常安全和RAII
  • C++11单例模式
  • C++歪门邪道
  • boost-program-option用法
  • c++17通过模板获取类成员的个数
  • 通过模板实现结构体成员拷贝-按成员名匹配
  • STL学习路径
  • boost库安装使用方法
  • C++文件读写
  • linux下socket通信demo,server和client
  • makefile写法
  • RxCpp
  • C++
gaoliu
2021-10-23
目录

通过宏定义控制debug打印

# 通过宏定义控制debug打印

参考: https://github.com/bytebutt/c-debug-header.git (opens new window)

包含头文件debug_print.h

#pragma once

#include <stdio.h>
#include <string.h>

#ifdef DEBUG_LEVEL_INFO
#  define DEBUG_LEVEL_WARNING
#  define DEBUG_LEVEL_ERROR
#endif

#ifdef DEBUG_LEVEL_WARNING
#  define DEBUG_LEVEL_ERROR
#endif


#define DEBUG_COLOR_RED     "\033[31m"
#define DEBUG_COLOR_GREEN   "\033[32m"
#define DEBUG_COLOR_YELLOW  "\033[33m"
#define DEBUG_COLOR_BLUE    "\033[34m"
#define DEBUG_COLOR_PURPLE  "\033[35m"
#define DEBUG_COLOR_RESET   "\033[m"

#define filename_strip_path(x) strrchr(x,'/')?strrchr(x,'/')+1:x
#define debug_prefix(tag,color)  printf(color "[%s|%d|%s]: " tag DEBUG_COLOR_RESET, filename_strip_path(__FILE__), __LINE__, __func__)


#if defined(DEBUG_LEVEL_INFO)
#  define debug_info(...)  do { debug_prefix("DEBUG_INFO: ",     DEBUG_COLOR_RESET);  printf(__VA_ARGS__); printf("\n"); } while(0)
#else
#  define debug_info(...)  ((void) 0)
#endif


#ifdef DEBUG_LEVEL_WARNING
#  define debug_warning(...)    do { debug_prefix("DEBUG_WARNING: ", DEBUG_COLOR_YELLOW); printf(__VA_ARGS__); printf("\n"); } while(0)
#else
#  define debug_warning(...)    ((void) 0)
#endif


#ifdef DEBUG_LEVEL_ERROR
#  define debug_error(...)    do { debug_prefix("DEBUG_ERROR: ",   DEBUG_COLOR_RED);    printf(__VA_ARGS__); printf("\n"); } while(0)
#  define debug_assert(expr)    do { if (!(expr)) { debug_prefix("ASSERTION FAILED: ", DEBUG_COLOR_PURPLE); printf(#expr); printf("\n"); } } while(0)
#else
#  define debug_error(...)    ((void) 0)
#  define debug_assert(...)     ((void) 0)
#endif


#define print_info(...)    do { debug_prefix("PRINT_INFO: ",   DEBUG_COLOR_GREEN);    printf(__VA_ARGS__); printf("\n"); } while(0)
#define print_warning(...)    do { debug_prefix("PRINT_WARNING: ", DEBUG_COLOR_YELLOW); printf(__VA_ARGS__); printf("\n"); } while(0)
#define print_error(...)    do { debug_prefix("PRINT_ERROR: ",   DEBUG_COLOR_RED);    printf(__VA_ARGS__); printf("\n"); } while(0)

#define error_exit(...)     do { debug_prefix("ERROR_EXIT: ", DEBUG_COLOR_RED); printf(__VA_ARGS__); printf(" - %s\n", strerror(errno)); exit(errno);} while(0)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

使用:

// #define DEBUG_INFO
#define DEBUG_WARNING

debug_info("this is a info\n");
debug_warning("this is a warning\n");

print_warning("this is a warning, will always print\n");
1
2
3
4
5
6
7

# 宏定义转字符串

#define  _MACRO_TO_STR_AUX(macor)  #macro
#define MACRO_TO_STR(macro) _MACRO_TO_STR_AUX(macor)


// usage:
#define test ABCD
printf("test=%s\n", MACRO_TO_STR(test)); //test=ABCD
1
2
3
4
5
6
7
编辑 (opens new window)
上次更新: 2023/05/07, 17:27:54
alignas、alignof、sizeof实现内存对齐分配
程序耗时性能测试

← alignas、alignof、sizeof实现内存对齐分配 程序耗时性能测试→

最近更新
01
通过模板实现结构体成员拷贝-按成员名匹配
05-07
02
c++17通过模板获取类成员的个数
05-01
03
avx-sse切换惩罚
04-30
更多文章>
Theme by Vdoing | Copyright © 2019-2023 Colder Leo | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×