🐧 内核调试 · 日志分析
📚 30 章 · 动手实战
printk/ftrace/eBPF
01
内核调试概述
为什么需要内核调试
调试挑战
方法论概览
02
printk基础
函数原型
日志级别 KERN_*
与printf区别
03
printk日志级别实战
选择日志级别
动态调整
/proc/sys/kernel/printk
04
printk格式化输出
%d %x %p %s
打印指针/结构体
自定义格式化
05
printk与内核缓冲区
环形缓冲区原理
dmesg详解
查看/清空日志
06
printk的局限性
性能开销
中断上下文限制
日志丢失
07
动态调试 (dynamic debug)
原理介绍
启用动态调试
过滤条件
08
动态调试实战
debugfs控制
pr_debug()
dev_dbg()技巧
09
内核Oops分析
Oops是什么
信息解读(寄存器/回溯)
常见原因
10
Oops实战案例
空指针解引用
内存越界
死锁导致Oops
11
内核恐慌 (Kernel Panic)
Panic触发条件
Panic信息分析
kdump机制简介
12
堆栈回溯 (Stack Trace)
dump_stack()
回溯信息解读
结合objdump
13
WARN_ON 和 BUG_ON
WARN_ON()场景
BUG_ON()场景
区别与选择
14
ftrace基础
架构介绍
tracefs文件系统
function tracer
15
ftrace进阶
function_graph
trace_printk()
动态过滤/跟踪
16
ftrace实战
跟踪特定函数
测量执行时间
分析性能瓶颈
17
perf工具入门
perf stat
perf record/report
perf top
18
perf高级功能
硬件性能计数器
tracepoint采样
perf script分析
19
kgdb调试
kgdb原理
配置内核支持
串口连接与调试
20
kgdb实战
设置断点
单步执行
查看变量/内存
21
kprobes机制
kprobes原理
jprobes/kretprobes
动态插桩
22
kprobes实战
监控函数参数
返回值
性能开销评估
23
systemtap入门
脚本语言
探针(probe)概念
安装与配置
24
systemtap实战
监控内核行为
分析系统调用
内存泄漏检测
25
eBPF基础
eBPF架构
BPF指令集
程序类型
26
eBPF开发环境
BCC工具集安装
bpftrace入门
eBPF C编程基础
27
eBPF实战
BCC内核跟踪
监控文件系统
网络数据包分析
28
内存调试
slab分配器调试
kmemleak
KASAN使用
29
锁调试
lockdep死锁检测
spinlock/mutex调试
RCU调试技巧
30
综合调试案例
实际问题出发
printk+ftrace+perf+eBPF
解决真实内核Bug