排障工具链一张图
本文对应 成长路径 高优先级:按 问题类型 快速选用用户态 / 内核态工具。
总览
| 层次 | 工具 | 典型问题 |
|---|---|---|
| 用户态动态 | 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>关注:EAGAIN、ENOENT、长时间阻塞的 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 tracetrace-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。
与站内文档
- 反汇编深入:反汇编在嵌入式问题定位中的应用:环境、工具与可读性
- 内核卡死:内核卡死与 hung task 入门
实践清单
- 对同一 bug 分别用 strace 与 perf 各收集一份数据
- 保存一份 addr2line 成功的符号化栈示例