排障工具链一张图

本文对应 成长路径 高优先级:按 问题类型 快速选用用户态 / 内核态工具。


总览

层次工具典型问题
用户态动态gdb崩溃、断点、看调用栈
用户态跟踪strace / ltrace卡在某个 syscall、文件未找到
CPU 采样perf热点函数、缓存未命中
内核跟踪ftrace / trace-cmd延迟、调度、irq
内核脚本bpftrace / bcc自定义统计、短时探测
符号化addr2line / eu-stack栈地址 → 源码行
反汇编objdump无符号或汇编级分析

流程串联见 排障 SOP:日志、perf 与反汇编


gdb(目标板 / 交叉)

# 主机
aarch64-linux-gnu-gdb ./app
(gdb) target remote :1234
 
# 目标 gdbserver
gdbserver :1234 ./app

内核调试需 vmlinux + 可选 KGDB;驱动常用 printk + sysfs 先行。


strace

strace -f -tt -o /tmp/trace.log ./app
strace -p <pid>

关注:EAGAINENOENT、长时间阻塞的 poll/futex


perf

perf record -g -F 99 -- sleep 30
perf report
perf stat ./benchmark

嵌入式需 内核 CONFIG_PERF_EVENTS;交叉编译 perf 与内核版本匹配。


ftrace

cd /sys/kernel/tracing
echo function_graph > current_tracer
echo my_func > set_graph_function
echo 1 > tracing_on
cat trace

trace-cmd 可离线分析;latency 模板查调度延迟。


bpftrace(若内核支持 BPF)

bpftrace -e 'kprobe:tcp_sendmsg { @[comm] = count(); }'

适合 短实验;生产需评估开销与 CONFIG_BPF


addr2line

aarch64-linux-gnu-addr2line -e ./app -f -C 0x400abc

-g 编译;发布版保留 分离 debuginfo


与站内文档


实践清单

  • 对同一 bug 分别用 straceperf 各收集一份数据
  • 保存一份 addr2line 成功的符号化栈示例