kernel-debugging-advanced
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseAdvanced Kernel Debugging
高级内核调试
Purpose
目的
Extend with production-grade tracing: , , kernel , /, , crash dump analysis, and discipline. Not merged with — that skill covers baseline kgdb/dyndbg; this one focuses on trace-cmd, function_graph, and live/post-mortem production workflows.
skills/kernel/kernel-debuggingftracetrace-cmdperfkprobeskretprobeskgdbprintkkernel-debugging扩展 ,提供生产级追踪能力:、、内核 、/、、崩溃转储分析,以及 使用规范。未合并到 ——后者 skill 涵盖基础 kgdb/dyndbg;本 skill 专注于 trace-cmd、function_graph,以及生产环境中的实时/事后分析工作流。
skills/kernel/kernel-debuggingftracetrace-cmdperfkprobeskretprobeskgdbprintkkernel-debuggingWhen to Use
使用场景
- Latency spikes in kernel driver without obvious bug
- Tracing function call graph in kernel
- Live inspection without recompiling (kprobes, bpf)
- Post-mortem after panic
vmcore
- 内核驱动程序出现延迟峰值,但没有明显的 bug
- 在内核中追踪函数调用图
- 无需重新编译即可进行实时检查(kprobes、bpf)
- 对 panic 后的 进行事后分析
vmcore
Workflow
工作流
1. ftrace function graph
1. ftrace function graph
bash
undefinedbash
undefinedEnable function graph tracer
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
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
reproduce issue
cat /sys/kernel/debug/tracing/trace
echo 0 > /sys/kernel/debug/tracing/tracing_on
Requires `CONFIG_FUNCTION_GRAPH_TRACER` and debugfs mounted.cat /sys/kernel/debug/tracing/trace
echo 0 > /sys/kernel/debug/tracing/tracing_on
需要启用 `CONFIG_FUNCTION_GRAPH_TRACER` 并挂载 debugfs。2. trace-cmd record
2. trace-cmd record
bash
trace-cmd record -p function_graph -F my_probe
trace-cmd report
trace-cmd statPortable capture for sharing with others.
bash
trace-cmd record -p function_graph -F my_probe
trace-cmd report
trace-cmd stat可移植的捕获结果,便于与他人共享。
3. perf in kernel context
3. 内核上下文中的 perf
bash
perf record -a -g -- sleep 10
perf report --stdio
perf probe --add my_driver:probeSee for userspace overlap.
skills/profilers/linux-perfbash
perf record -a -g -- sleep 10
perf report --stdio
perf probe --add my_driver:probe与用户态重叠的部分,请参阅 。
skills/profilers/linux-perf4. kprobes (dynamic)
4. kprobes(动态)
c
#include <linux/kprobes.h>
static struct kprobe kp = {
.symbol_name = "do_sys_open",
.pre_handler = handler,
};
register_kprobe(&kp);Use sparingly in production; prefer static tracepoints when available.
c
#include <linux/kprobes.h>
static struct kprobe kp = {
.symbol_name = "do_sys_open",
.pre_handler = handler,
};
register_kprobe(&kp);在生产环境中应谨慎使用;如果有可用的静态 tracepoint,应优先使用。
5. dyndbg and printk discipline
5. dyndbg 与 printk 使用规范
bash
echo 'module mydriver +p' > /sys/kernel/debug/dynamic_debug/control
echo 'file drivers/foo/*.c +p' > /sys/kernel/debug/dynamic_debug/controlc
pr_debug("state=%d\n", s); /* compile-time optional */
printk_ratelimited(KERN_WARNING "hw fault\n");bash
echo 'module mydriver +p' > /sys/kernel/debug/dynamic_debug/control
echo 'file drivers/foo/*.c +p' > /sys/kernel/debug/dynamic_debug/controlc
pr_debug("state=%d\n", s); /* compile-time optional */
printk_ratelimited(KERN_WARNING "hw fault\n");6. kgdb / kdb
6. kgdb / kdb
bash
undefinedbash
undefinedkernel cmdline: kgdboc=ttyS0,115200 kgdbwait
kernel cmdline: kgdboc=ttyS0,115200 kgdbwait
echo g > /proc/sysrq-trigger # break into debugger (when configured)
undefinedecho g > /proc/sysrq-trigger # break into debugger (when configured)
undefined7. Crash dump (vmcore)
7. 崩溃转储(vmcore)
bash
undefinedbash
undefinedafter kdump capture
after kdump capture
crash /usr/lib/debug/vmlinux vmcore
crash> bt
crash> dev -s
undefinedcrash /usr/lib/debug/vmlinux vmcore
crash> bt
crash> dev -s
undefined8. Agent usage
8. Agent 使用方式
/kernel-debugging-advanced Trace my_driver_ioctl latency with ftrace function_graph/kernel-debugging-advanced Trace my_driver_ioctl latency with ftrace function_graphCommon Problems
常见问题
| Symptom | Cause | Fix |
|---|---|---|
| Empty trace | Tracer not enabled | |
| ftrace overhead | Graph all functions | Filter with |
| kprobe fail | Inlined symbol | Try nearby symbol or static key |
| kgdb no connect | Wrong | Match serial/USB gadget |
| crash no symbols | Missing debuginfo | Install |
| 症状 | 原因 | 修复方式 |
|---|---|---|
| 跟踪结果为空 | 未启用 Tracer | 启用 |
| ftrace 开销过高 | 跟踪了所有函数 | 使用 |
| kprobe 失败 | 符号被内联 | 尝试附近的符号或 static key |
| kgdb 无法连接 | | 匹配串行端口或 USB gadget |
| crash 中没有符号 | 缺少 debuginfo | 安装 |
Related Skills
相关 Skills
- — baseline kgdb, dyndbg
skills/kernel/kernel-debugging - — perf record/report
skills/profilers/linux-perf - — BPF kprobe alternative
skills/observability/ebpf - — ioctl trace targets
skills/kernel-dev/writing-char-drivers - — userspace core parallels
skills/debuggers/core-dumps
- ——基础 kgdb、dyndbg
skills/kernel/kernel-debugging - ——perf record/report
skills/profilers/linux-perf - ——BPF kprobe 替代方案
skills/observability/ebpf - ——ioctl 追踪目标
skills/kernel-dev/writing-char-drivers - ——用户态 core dump 的对应方案
skills/debuggers/core-dumps