mirror of
https://github.com/Light-City/CPlusPlusThings.git
synced 2026-10-29 11:24:07 +08:00
- const README: rewrite the space-saving claim per issue #5 follow-ups (constant-expression const vs #define immediates; which const qualify as constant expressions) - const README: fix the class-section diagnosis per issue #338 (overload resolution picks the const overload; the restriction only surfaces once that overload is removed) - sizeof README: virtual-inheritance result is compiler-dependent (GCC merges vbptr+vfptr -> 16, MSVC keeps them separate -> 32) #246 - static README: new section on internal linkage / access restriction with anonymous-namespace comparison #142 - 10-day practice: full problem list table + fixed day links #136 - new design_pattern/singleton/singleton_default.hpp: reusable thread-safe CRTP singleton template, compile+concurrency tested #303
70 lines
1.8 KiB
Markdown
70 lines
1.8 KiB
Markdown
> 本文档由 [C++那些事网站](https://light-city.github.io/stories_things/cpp-tools/dbg-macro/) 同步生成,网站版本含多语言与更新排版。
|
||
|
||
# C++ dbg-macro 调试宏
|
||
|
||
打日志是 C++ 开发中必不可少的一种 debug 方式,dbg-macro 受 Rust 语言中 的 `dbg` 启发,提供比 `printf` 和 `std::cout` 更好的宏函数。主要有如下特点:
|
||
|
||
- 美观的彩色输出(当输出不是交互式终端时,颜色将自动禁用)
|
||
- 兼容 C++11,并且是 header-only
|
||
- 支持基础类型和 STL 容器类型的输出
|
||
- 可以输出文件名、行号、函数名和原始表达式
|
||
|
||
例如下面的代码:
|
||
|
||
```cpp
|
||
#include <vector>
|
||
#include <dbg.h>
|
||
|
||
// You can use "dbg(..)" in expressions:
|
||
int factorial(int 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 int a = 2;
|
||
const int b = dbg(3 * a) + 1; // [example.cpp:18 (main)] 3 * a = 6 (int)
|
||
|
||
std::vector<int> numbers{b, 13, 42};
|
||
dbg(numbers); // [example.cpp:21 (main)] numbers = {7, 13, 42} (size: 3) (std::vector<int>)
|
||
|
||
dbg("this line is executed"); // [example.cpp:23 (main)] this line is executed
|
||
|
||
factorial(4);
|
||
|
||
return 0;
|
||
}
|
||
```
|
||
|
||
效果如下:
|
||
|
||

|
||
|
||
## 安装
|
||
|
||
```bash
|
||
git clone https://github.com/sharkdp/dbg-macro
|
||
sudo ln -s $(readlink -f dbg-macro/dbg.h) /usr/include/dbg.h
|
||
```
|
||
|
||
这样,你就可以在任何地方使用 `dbg.h` 了。
|
||
|
||
### 在 Arch Linux 上
|
||
|
||
```bash
|
||
yay -S dbg-macro
|
||
```
|
||
|
||
### 使用 vcpkg
|
||
|
||
```bash
|
||
vcpkg install dbg-macro
|
||
```
|
||
|
||
更多内容详见 [官方文档](https://github.com/sharkdp/dbg-macro)。 |