perf probe 深入:kprobe/uprobe
更新时间:2026-10-01。已有 perf probe,本文讲没有现成 tracepoint 时如何自定义观测点。
一、加探针
bash
perf probe -V tcp_sendmsg # 查可用变量(需debuginfo)
perf probe 'tcp_sendmsg size' # 探针带参数
perf probe 'tcp_sendmsg%return $retval'
perf probe -x /lib/libc.so.6 malloc内核函数用 kprobe,用户态库用 uprobe(-x);可按函数名或文件:行号,取参数、局部变量、返回值。
二、工作流

三、常见坑
- 缺 debuginfo 拿不到源码变量(可退到寄存器/位置)。
- 编译器内联/优化使函数或变量不可见。
- 探针忘了删除长期残留。
小结
perf probe 把任意内核/用户函数变成可统计事件,参数与返回值靠 debuginfo,用完即删。下一篇 perf ftrace 与内核跟踪。
总结
当目标函数没有现成 tracepoint,perf probe 可对内核函数(kprobe)或用户态库/二进制(uprobe,-x)动态加探针,无需重启或重编译:用 -V/--vars 查可用变量,按函数名或文件:行号取参数、局部变量,用 %return $retval 抓返回值,再 perf record -e probe:* 统计命中与调用栈;变量信息依赖 debuginfo(缺失时只能退到寄存器/偏移),编译器内联/优化也会让函数或变量不可见——探针用完务必 -d 删除,避免长期残留。