温馨提示×

Linux C++调试如何配

小樊
33
2026-07-17 05:28:59
栏目: 编程语言

在 Linux 下调试 C++ 程序,常见且推荐的方案是 GDB + GCC/Clang + 调试信息。下面从环境准备 → 编译 → 调试 → 常用技巧一步步说明。


一、准备环境

1. 安装工具链

# Ubuntu / Debian
sudo apt update
sudo apt install build-essential gdb

# CentOS / Rocky / Alma
sudo yum groupinstall "Development Tools"
sudo yum install gdb

检查:

g++ --version
gdb --version

二、编译时生成调试信息(非常关键)

✅ 必须加 -g

g++ -g main.cpp -o main

✅ 推荐(调试 + 优化折中)

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

-O0:关闭优化,避免变量被优化掉、代码乱序

❌ 错误示例

g++ main.cpp -o main   # 无调试信息,GDB 几乎不可用

三、使用 GDB 调试

1. 启动 GDB

gdb ./main

或:

gdb --args ./main arg1 arg2

2. 常用 GDB 命令(重点)

运行程序

run
run arg1 arg2

设置断点

break main                # 函数断点
break main.cpp:10         # 行号断点
break MyClass::foo        # C++ 类成员函数

查看代码

list
list main.cpp:10

单步执行

next      # 下一步(不进入函数)
step      # 进入函数

查看变量

print x
print obj.member

查看调用栈

backtrace
bt

继续执行

continue

删除断点

delete 1

四、调试崩溃(Segmentation fault)

1. 运行程序

./main

2. 自动进入 GDB

gdb ./main
run

崩溃后:

bt

你可以看到崩溃位置 + 调用栈


五、调试多线程程序

info threads
thread 2
thread apply all bt

六、调试野指针 / 内存问题(进阶)

1. 使用 AddressSanitizer(强烈推荐)

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

✅ 能直接定位:

  • 越界访问
  • use-after-free
  • 内存泄漏(部分)

七、VS Code + GDB(图形化调试,推荐)

1. 安装插件

  • C/C++
  • C++ Intellisense

2. 编译

g++ -g main.cpp -o main

3. 配置 launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "C++ Debug",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}/main",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "externalConsole": false,
      "MIMode": "gdb"
    }
  ]
}

然后 F5 调试


八、常见坑

问题 原因
变量显示 <optimized out> 没加 -O0
断点打不上 没有 -g
看不到源码 编译路径变了
STL 容器看不懂 正常,GDB 对 STL 支持有限

九、推荐调试组合(实战)

日常开发

GCC + GDB + VS Code

内存问题

-fsanitize=address

复杂项目

CMake + Debug build

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

  • Makefile / CMake 吗?
  • 命令行调试 还是 VS Code / CLion
  • 段错误 / 死循环 / 多线程问题

我可以直接给你针对你项目的调试配置

0