文章

c++ debug 神器 dbg-macro

dbg-macro 是一个 c++ 调试宏,用于简化调试过程。它以非常简洁的方式打印变量名、值、和类型等信息,便于快速定位问题。

特点

  • 简单易用: 使用 dbg(变量) 的方式即可打印变量的名称和值,极大简化了调试信息的打印。
  • 类型安全: 它是基于 c++ 的模板和宏功能实现的,可以保证类型安全。
  • 丰富的信息: 不仅打印变量的值,还可以显示变量的类型,甚至是表达式的值和类型。
  • 灵活性: 可以很容易地启用或禁用 dbg-macro,而不需要从代码中删除或注释调试语句。

使用方法

1. 安装

首先需要将 dbg-macro 的头文件包含到项目中。可以通过克隆其 GitHub 仓库或将头文件直接下载到项目中来实现。

1
2
# 仓库地址
https://github.com/sharkdp/dbg-macro

2. 包含头文件

在需要使用 dbg-macro 的文件顶部包含头文件。

1
#include "dbg.h"

3. 使用 dbg 宏

使用 dbg() 宏来打印变量名和值。

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
#include <cstdint>
#include <vector>
#include "dbg.h"

// You can use "dbg(..)" in expressions:
int32_t factorial(int32_t n) {
  if (dbg(n <= 1)) {
    return dbg(1);
  } else {
    return dbg(n * factorial(n - 1));
  }
}

int main() {
  std::string message = "hello";
  dbg(message);  // [example.cpp:15 (main)] message = "hello" (std::string)

  const int32_t a = 2;
  const int32_t b = dbg(3 * a) + 1;  // [example.cpp:18 (main)] 3 * a = 6 (int32_t)

  std::vector<int32_t> numbers{b, 13, 42};
  dbg(numbers);  // [example.cpp:21 (main)] numbers = {7, 13, 42} (std::vector<int32_t>)

  dbg("this line is executed");  // [example.cpp:23 (main)] this line is executed

  factorial(4);

  return 0;
}

result

注意事项

虽然 dbg-macro 对调试非常有帮助,但它也可能对程序性能产生影响。因此,建议仅在调试时使用它,并在发布产品时移除或禁用这些调试宏。

本文由作者按照 CC BY 4.0 进行授权

© ziqing. 保留部分权利。

纸上得来终觉浅,绝知此事要躬行!