温馨提示×

linux c++配置怎么调试

小樊
48
2026-09-02 02:30:49
栏目: 编程语言

在 Linux 下用 C++ 进行调试,常见且成熟的方案如下(从“最常用”到“进阶”):


一、基础准备(必须先做)

1. 编译时加上调试信息

g++ -g -O0 main.cpp -o main
  • -g:生成调试符号
  • -O0:关闭优化(否则变量可能被优化掉,调试困难)

二、常用调试方式

✅ 1. GDB(最常用、必学)

启动调试

gdb ./main

常用命令

run                 # 运行程序
break main.cpp:10   # 在某一行打断点
break funcName      # 在函数处打断点
next                # 单步(不进入函数)
step                # 单步(进入函数)
print x             # 打印变量
backtrace           # 查看调用栈
continue            # 继续执行
quit                # 退出

调试崩溃(core dump)

ulimit -c unlimited
./main
gdb ./main core

✅ 2. CGDB(GDB 的友好版)

更适合新手:

sudo apt install cgdb
cgdb ./main

✅ 3. VS Code(图形化,推荐)

步骤

  1. 安装:
    • C/C++ 插件
    • GDB
  2. tasks.json 编译:
{
  "label": "build",
  "command": "g++",
  "args": ["-g", "main.cpp", "-o", "main"]
}
  1. launch.json 调试:
{
  "type": "cppdbg",
  "request": "launch",
  "program": "${workspaceFolder}/main",
  "MIMode": "gdb"
}

✅ 支持:

  • 断点
  • 变量查看
  • 调用栈
  • 多线程调试

✅ 4. LLDB(Clang 用户)

lldb ./main

命令与 GDB 类似:

break set --file main.cpp --line 10
run
bt

三、多线程 / 并发调试

info threads
thread 2
thread apply all bt

四、内存问题调试(非常重要)

1. Valgrind(内存泄漏、越界)

valgrind --leak-check=full ./main

2. AddressSanitizer(推荐,速度快)

g++ -g -fsanitize=address main.cpp -o main
./main

五、日志调试(简单但实用)

#include <iostream>
std::cerr << "x = " << x << std::endl;

或使用:

  • spdlog
  • glog

六、常见问题排查

问题 原因
变量看不到 没加 -g 或开了 -O2
断点无效 编译优化
多线程卡死 死锁
段错误 空指针 / 越界

七、推荐学习路径

  1. ✅ 会用 g++ -g
  2. ✅ 会用 gdb
  3. ✅ 会用 VS Code 调试
  4. ✅ 会用 AddressSanitizer

如果你愿意,可以告诉我:

  • 你用的是 g++ / clang
  • 是否是 CMake 项目
  • 是否 多线程 / 网络 / 嵌入式

我可以直接给你具体配置示例

0