温馨提示×

linux c++配置怎样调试

小樊
39
2026-09-08 02:59:17
栏目: 编程语言

在 Linux 下用 C++ 开发时,调试通常分为编译配置运行调试工具常见调试手段三部分。下面给你一个实用、系统的说明。


一、编译阶段配置(非常关键)

1. 必须加调试信息

使用 g++ / gcc 时,一定要加:

-g        # 生成调试符号
-O0       # 关闭优化(否则变量可能被优化掉)

示例:

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

✅ 推荐(更详细信息):

-g3 -O0

2. CMake 配置(如果你用 CMake)

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

或:

cmake -DCMAKE_BUILD_TYPE=Debug ..

3. 开启警告(提前发现问题)

-Wall -Wextra

二、常用调试工具

✅ 1. GDB(最基础、最常用)

启动程序

gdb ./main

常用命令

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

调试崩溃(core dump)

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

✅ 2. GDB + 多线程

info threads
thread 2
bt

✅ 3. Valgrind(内存问题神器)

检测内存泄漏、越界:

valgrind --leak-check=full ./main

常用参数:

--tool=memcheck
--show-leak-kinds=all

✅ 4. AddressSanitizer(强烈推荐)

编译时开启:

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

运行:

./main

能检测:

  • 内存越界
  • use-after-free
  • 内存泄漏

✅ 5. strace(系统调用)

strace ./main

适合:

  • 程序卡死
  • 文件/网络问题

三、日志调试(工程化)

简单方式

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

推荐日志库

  • spdlog
  • glog
  • boost.log

四、IDE / 可视化调试(可选)

1. VS Code(很流行)

  • 安装 C/C++ 插件
  • 配置 launch.json
  • 使用 GDB 后端

2. CLion(商业,体验最好)

  • 内置 GDB / LLDB
  • CMake 原生支持

3. Qt Creator

  • 适合 Qt 项目

五、调试思路总结(实战)

  1. 先确认编译是 Debug 模式
  2. 能复现问题
  3. 用 GDB 打断点看变量
  4. 怀疑内存 → AddressSanitizer / Valgrind
  5. 怀疑系统调用 → strace
  6. 多线程 → 看线程栈

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

  • 你用的是 Makefile / CMake / 裸 g++
  • 段错误 / 卡死 / 逻辑错误 / 内存泄漏
  • 是否 多线程 / 网络 / 嵌入式

我可以直接给你对应的调试命令和示例

0