用途
本技能用于扩展基础内核调试能力,提供生产级追踪手段,覆盖 ftrace、trace-cmd、kernel perf、kprobes/kretprobes、kgdb、崩溃转储分析以及 printk 使用规范。它与基础内核调试技能并不合并:基础技能覆盖 kgdb/dyndbg 的基线用法,而本技能聚焦于 trace-cmd、function_graph 以及在线与事后生产工作流。
适用时机:
- 内核驱动出现延迟尖峰但没有明显 bug
- 需要追踪内核中的函数调用图
- 在不重新编译的情况下进行在线检查(kprobes、bpf)
- panic 之后对 vmcore 进行事后分析
主要能力与工作流
1. ftrace function graph
# Enable function graph tracer
echo function_graph > /sys/kernel/debug/tracing/current_tracer
echo my_driver_probe > /sys/kernel/debug/tracing/set_graph_function
echo 1 > /sys/kernel/debug/tracing/tracing_on
# reproduce issue
cat /sys/kernel/debug/tracing/trace
echo 0 > /sys/kernel/debug/tracing/tracing_on
依赖 CONFIG_FUNCTION_GRAPH_TRACER,并需挂载 debugfs。
2. trace-cmd record
trace-cmd record -p function_graph -F my_probe
trace-cmd report
trace-cmd stat
用于可移植的抓取,便于与他人共享。
3. 内核上下文中的 perf
perf record -a -g -- sleep 10
perf report --stdio
perf probe --add my_driver:probe
与用户态的 skills/profilers/linux-perf 存在重叠。
4. kprobes(动态)
#include <linux/kprobes.h>
static struct kprobe kp = {
.symbol_name = "do_sys_open",
.pre_handler = handler,
};
register_kprobe(&kp);
在生产环境应谨慎使用;若有静态 tracepoint 可用,优先采用静态 tracepoint。
5. dyndbg 与 printk 规范
echo 'module mydriver +p' > /sys/kernel/debug/dynamic_debug/control
echo 'file drivers/foo/*.c +p' > /sys/kernel/debug/dynamic_debug/control
pr_debug("state=%d\n", s); /* compile-time optional */
printk_ratelimited(KERN_WARNING "hw fault\n");
6. kgdb / kdb
# kernel cmdline: kgdboc=ttyS0,115200 kgdbwait
echo g > /proc/sysrq-trigger # break into debugger (when configured)
7. 崩溃转储(vmcore)
# after kdump capture
crash /usr/lib/debug/vmlinux vmcore
crash> bt
crash> dev -s
8. 智能体用法
/kernel-debugging-advanced Trace my_driver_ioctl latency with ftrace function_graph
常见问题
| 现象 | 原因 | 修复 |
|---|---|---|
| 追踪为空 | 追踪器未启用 | 确认 tracing_on 与 current_tracer |
| ftrace 开销大 | 对所有函数做 graph | 用 set_graph_function 过滤 |
| kprobe 失败 | 符号被内联 | 尝试附近符号或静态 key |
| kgdb 无法连接 | kgdboc 的 tty 不正确 | 匹配串口/USB gadget |
| crash 无符号 | 缺少 debuginfo | 安装 linux-image-dbg / vmlinux |
相关技能
- skills/kernel/kernel-debugging — 基线 kgdb、dyndbg
- skills/profilers/linux-perf — perf record/report
- skills/observability/ebpf — BPF kprobe 替代方案
- skills/kernel-dev/writing-char-drivers — ioctl 追踪目标
- skills/debuggers/core-dumps — 用户态 core dump 对应内容
限制
除资料中给出的命令行示例、代码片段与依赖说明外,其他配置细节、平台支持范围与效果数据暂未提供。