在 C/C++ 的开发生涯中,我们每个人都经历过这样的时刻:为了追踪一个变量的值,在代码中散布了无数个 printf 或 std::cout。当你需要打印五个变量时,你的代码会变成这样:
cpp
printf("x = %d, y = %d, z = %f, name = %s, status = %d\n", x, y, z, name.c_str(), status);
这种方式不仅低效,而且极其容易出错(格式化字符串与变量类型不匹配),最糟糕的是,当你完成调试后,必须手动删除这些散落在各处的打印语句,否则它们会污染生产环境的日志。
dbg-macro 正是为了终结这种低效而生的轻量级调试利器。它通过巧妙的宏定义和模板元编程,实现了类似 Rust 语言中 dbg! 宏的体验:自动打印文件名、行号、变量名及其当前值,且无需手动编写格式化字符串。
什么是 dbg-macro?
dbg-macro 是一个仅由头文件组成的 C/C++ 库,旨在提供一种极简的、非侵入式的调试方式。它的核心逻辑是:当你调用 DBG(variable) 时,它不仅输出变量的值,还会告诉你这个变量在源代码中的名称以及它所在的位置。
核心特性:
- 零配置启动:无需编译复杂的库,直接
#include即可使用。 - 自动类型推导:利用 C++ 的重载和模板,自动处理不同类型的变量,无需
%d或%s。 - 上下文感知:自动输出
[文件名:行号],让你瞬间定位问题点。 - 表达式支持:不仅支持变量,还支持复杂的表达式。
- 易于开关:可以通过简单的宏定义在发布版本中全局禁用所有调试输出。
快速上手实例
假设你正在编写一个复杂的算法,需要监控多个状态变量。
1. 基础用法
不再需要写冗长的 cout,直接使用 DBG():
cpp
#include "dbg.h"
#include <vector>
#include <string>
int main() {
int age = 25;
std::string name = "Alice";
double pi = 3.14159;
// 传统方式:
// std::cout << "age: " << age << ", name: " << name << ", pi: " << pi << std::endl;
// dbg-macro 方式:
DBG(age);
DBG(name);
DBG(pi);
return 0;
}
输出结果:
text
[main.cpp:12] age = 25 [main.cpp:13] name = "Alice" [main.cpp:14] pi = 3.14159
2. 调试复杂表达式
DBG() 宏不仅能打印变量,还能直接打印表达式的结果,这在调试循环或条件判断时极其有用:
cpp
for (int i = 0; i < 5; ++i) {
DBG(i * 2 > 5); // 直接打印判断结果
DBG(i + 100); // 直接打印计算结果
}
输出结果:
text
[main.cpp:18] i * 2 > 5 = false [main.cpp:19] i + 100 = 100 ... [main.cpp:18] i * 2 > 5 = true [main.cpp:19] i + 100 = 104
3. 容器与自定义类型
对于 std::vector 或 std::map 等容器,dbg-macro 提供了良
dbg-macro_20260929153529.zip
类型:压缩文件|已下载:0|下载方式:免费下载
立即下载



还没有评论,来说两句吧...