跳到主要内容

调试工具

调试是定位逻辑错误与崩溃原因的核心环节。Linux 下最常用的是 gdb,结合 core dump 可以离线分析崩溃现场,strace 则适合追踪系统调用层面的问题。

gdb 基础流程

gdb ./program # 加载可执行文件
gdb ./program core # 结合 core dump 分析
gdb -p <pid> # 附加到运行中的进程

启动后常用命令:

命令缩写作用
break file:lineb设置断点
run [args]r启动程序
nextn单步(不进入函数)
steps单步(进入函数)
continuec继续执行到下个断点
print exprp打印表达式
watch exprw监视变量变化
backtracebt查看调用栈
quitq退出

条件断点

(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 输出汇总统计。