本页目录
ftrace 与 bpftrace 用户态追踪
覆盖: uprobe → USDT (DTrace probes) → bpftrace 用户态脚本 → perf probe on userspace → 用户态动态追踪全景 适用: Linux + bpftrace/bcc/perf
uprobe: 用户态函数探测
# uprobe: 在任意用户态函数入口/返回放置探测点
# 语法: uprobe:<binary>:<function>
# 例: 追踪 bash 的 readline:
# → 每次 bash 调 readline → 记录
# 带参数:
# cmd: 函数返回后的第一个参数 (%si=x0 on ARM, %rdi on x86)
# uretprobe: 函数返回时
USDT: 预埋的静态探测点
// USDT (User Statically Defined Tracing): 类似 DTrace probes
// 编译时预埋, 运行时零开销 (NOP) → 直到被激活
;
// → 编译为 NOP sled → 运行时被 uprobe 替换为 INT3 breakpoint
// 查看二进制中的 USDT 埋点:
bpftrace -l 'usdt:/path/to/binary:*'
readelf -n /path/to/binary | grep NT_STAPSDT
bpftrace: 用户态追踪
# 一行追踪:
# 直方图:
# 统计:
# 按进程:
# 追踪函数耗时:
# 追踪 open 调用 (带文件名):
bcc 用户态工具
# bcc: Python + BPF 的高级封装
# 已编译的工具 (在 /usr/share/bcc/tools/):
# 用途: 不需要写 BPF 程序 → 直接用预编译工具
与内核追踪的组合
# 从用户态到内核态的完整链路:
调试技巧
# 找二进制中可探测的函数:
| | |
# 查看已安装的 uprobe:
# 查看 perf 探测点:
# 清理:
参考
- 工具: bpftrace (github.com/bpftrace), bcc (github.com/iovisor/bcc)
- 文档:
man perf-probe, Brendan Gregg's blog - LWN: "Uprobes and USDT", "Dynamic tracing with bpftrace"
关键词: uprobe, uretprobe, USDT, DTRACE_PROBE, bpftrace, bcc, user-space tracing, SDT