在 Linux 下用 C++ 调试程序,常见且实用的方法如下,从基础到进阶逐步说明:
g++ -g -O0 main.cpp -o main
-g:生成调试符号-O0:关闭优化(否则变量可能被优化掉,调试困难)gdb ./main
| 命令 | 作用 |
|---|---|
run / r |
运行程序 |
break main / b 行号 |
设置断点 |
next / n |
单步(不进函数) |
step / s |
单步(进入函数) |
print x / p x |
打印变量 |
backtrace / bt |
查看调用栈 |
frame n |
切换栈帧 |
continue / c |
继续执行 |
quit / q |
退出 |
gdb ./main
run
bt
可以看到崩溃位置和调用栈。
ulimit -c unlimited
./main
# 崩溃后生成 core 文件
gdb ./main core
bt
#include <iostream>
std::cout << "x = " << x << std::endl;
或使用日志库:
valgrind --leak-check=full ./main
cppcheckcppcheck main.cpp
clang-tidyclang-tidy main.cpp -- -std=c++17
#include <cassert>
assert(ptr != nullptr);
break main.cpp:20 if x > 10
watch x
-g -O0cout 或日志定位大致问题如果你有具体场景(如多线程、段错误、死锁、性能问题),我可以给你更针对性的调试方案。