调试工具
调试是定位逻辑错误与崩溃原因的核心环节。Linux 下最常用的是 gdb,结合 core dump 可以离线分析崩溃现场,strace 则适合追踪系统调用层面的问题。
gdb 基础流程
gdb ./program # 加载可执行文件
gdb ./program core # 结合 core dump 分析
gdb -p <pid> # 附加到运行中的进程
启动后常用命令:
| 命令 | 缩写 | 作用 |
|---|---|---|
break file:line | b | 设置断点 |
run [args] | r | 启动程序 |
next | n | 单步(不进入函数) |
step | s | 单步(进入函数) |
continue | c | 继续执行到下个断点 |
print expr | p | 打印表达式 |
watch expr | w | 监视变量变化 |
backtrace | bt | 查看调用栈 |
quit | q | 退出 |
条件断点
(gdb) break foo.c:42 if i == 5
(gdb) condition 1 i > 100
(gdb) ignore 1 10 # 跳过前 10 次命中
在循环或高频调用中,条件断点能避免每次都手动 continue。
core dump
系统崩溃时若启用 core dump,内核会把进程内存写入 core 文件:
ulimit -c unlimited
sudo sysctl -w kernel.core_pattern=/tmp/core.%e.%p.%t
再用 gdb ./program core 加载,直接 bt 查看崩溃栈,结合 frame n 切换栈帧、print var 查看变量。
strace
strace 跟踪进程的系统调用与信号,适合排查「卡住」「权限拒绝」「文件找不到」类问题。
strace -f -e trace=open,openat,read,write ./program
strace -p <pid> # 附加到运行中的进程
strace -o trace.log -c ./program # 统计调用次数
-f 跟踪子进程,-e 过滤调用类型,-c 输出汇总统计。