温馨提示×

linux c++配置如何调试程序

小樊
40
2026-09-26 07:31:18
栏目: 编程语言

在 Linux 下用 C++ 调试程序,通常分为编译配置、调试工具使用和常见问题定位三部分。下面给你一套实用流程。


一、编译时开启调试信息(最关键)

1. 使用 g++ / gcc 编译

一定要加 -g,否则无法调试:

g++ -g -O0 main.cpp -o app

说明:

  • -g:生成调试符号
  • -O0:关闭优化(避免变量被优化掉,调试更直观)
  • 推荐 release 也带 -g(可 strip 去掉符号)

2. CMake 项目

set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")

或命令行:

cmake -DCMAKE_BUILD_TYPE=Debug ..

二、使用 GDB 调试(最常用)

1. 启动调试

gdb ./app

或调试正在运行的程序:

gdb -p <pid>

2. 常用 GDB 命令

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

3. 程序崩溃时

gdb ./app core
bt

(需开启 core dump)


三、开启 Core Dump(崩溃分析)

ulimit -c unlimited

运行程序后若崩溃:

gdb ./app core
bt

四、图形化 / 高级调试工具

1. CGDB(类 vim 界面)

cgdb ./app

2. VS Code(推荐)

  • 安装 C/C++ 插件
  • launch.json 示例:
{
  "type": "cppdbg",
  "request": "launch",
  "program": "${workspaceFolder}/app",
  "MIMode": "gdb"
}

3. Valgrind(内存错误)

valgrind --leak-check=full ./app

4. AddressSanitizer(强烈推荐)

编译:

g++ -g -O1 -fsanitize=address main.cpp -o app

运行:

./app

可检测:

  • 内存越界
  • 使用已释放内存
  • 内存泄漏

五、多线程调试

info threads
thread 2
bt

六、常见问题排查建议

  • 段错误 → GDB + backtrace
  • 内存泄漏 → Valgrind / ASan
  • 死锁 → GDB thread apply all bt
  • 优化导致变量看不到 → 用 -O0

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

  • 用 Makefile / CMake / 直接用 g++?
  • 是 命令行调试 还是 VS Code?
  • 遇到的是 崩溃 / 卡死 / 逻辑错误?

我可以直接给你一份可复用的调试配置模板。

0 踩