bpftrace探测点完全手册:kprobe、uprobe、tracepoint与fentry使用详解
bpftrace探测点完全手册kprobe、uprobe、tracepoint与fentry使用详解【免费下载链接】bpftraceHigh-level tracing language for Linux项目地址: https://gitcode.com/gh_mirrors/bp/bpftracebpftrace 是 Linux 上的高级追踪语言而**探测点Probe**是 bpftrace 脚本的核心——它决定了追踪发生在哪里。这篇文章带你完整掌握 bpftrace 最常用的四类探测点kprobe内核函数、uprobe用户态函数、tracepoint静态追踪点和fentry基于 BTF 的近零开销函数追踪覆盖如何列出可用探测点、四类探测点怎么选等高频问题新手和普通用户也能直接上手。上图展示了 bpftrace 各类探测点与 Linux 内核分层的对应关系kprobe 一族向内核对内核代码做动态插桩uprobe 一族面向用户态应用tracepoint 是编译进内核的静态追踪点而 fentry 则依附于 BTF 类型信息。 快速上手如何列出系统支持的探测点写脚本之前最实用的一招是先用bpftrace -l列出探测点看看当前系统到底支持什么bpftrace -l kprobe:*file* # 列出所有带 file 字样的 kprobe bpftrace -l t:syscalls:*openat* # 用短名 t 列出 openat 相关 tracepoint bpftrace -lv fentry:tcp_reset # -v 附加参数类型信息加上-v参数后bpftrace 会进一步显示每个探测点的参数名和参数类型如fentry:tcp_reset的sk、skb两个结构体指针帮你省掉查源码的时间。探测点还支持通配符甚至可以多探测点共享一个动作kprobe:tcp_reset,kprobe:*socket* { printf(Entered: %s\n, probe); }详细的列出探测点方法可参考 man/adoc/bpftrace.adoc。 四类核心探测点详解1️⃣ kprobe / kretprobe内核函数动态追踪kprobe 是 bpftrace 最经典的探测点实现对任意内核函数的动态插桩——每当该函数被调用BPF 程序就会运行一次kprobe:tcp_reset { tcp_resets count(); }变体kprobe[:模块]:函数例如kprobe:kvm:x86_emulate_insn可追踪 KVM 内核模块中的函数短名kkprobe、krkretprobe参数访问通过argN按寄存器顺序取参x86_64 上前 6 个非浮点参数走寄存器需要自己写类型转换来解引用结构体kretprobe在函数返回时触发只能拿到返回值retval拿不到入参。常见套路是入口存进 map、出口取出来还支持按文件:行号定位需 DWARF 调试信息方便在函数体内部打断点式追踪。完整细节见 docs/language.md。2️⃣ uprobe / uretprobe用户态函数与库追踪uprobe 是 kprobe 在用户态的镜像版本可以追踪任意进程里的函数调用uprobe:/bin/bash:readline { printf(arg0: %d\n, arg0); }短名uuprobe、ururetprobe追踪库时写库名即可uprobe:libc:malloc会自动通过/etc/ld.so.cache解析出完整路径同一库存在多个版本时如libssl.so.3建议显式写带版本号的 SONAME 避免挂错C 程序有惊喜加cpp限定符后可直接用人类可读的函数名含MyApp::Server::*通配符不必去记编译器混淆后的名字uretprobe拿retval但不能拿入参与 kretprobe 同样的限制⚠️ 追踪 C 时arg0可能是this指针追踪 Golang 等自带运行时的语言时uretprobe 的返回地址改写机制可能引发 runtime 报错需要留意。完整细节见 docs/language.md。3️⃣ tracepoint最稳定的静态追踪点tracepoint 是内核源码中预先定义、编译进内核的静态追踪点。与 kprobe 不同tracepoint 不依赖某个内核函数恰好存在接口更加稳定升级内核后脚本通常不用改tracepoint:syscalls:sys_enter_openat { printf(%s %s\n, comm, str(args.filename)); }短名t参数通过结构化的args对象按名字访问args.filename无需手动类型转换官方工具大量基于它实现例如仓库自带的 tools/opensnoop.bt 就同时挂在了sys_enter_open/openat/openat2三个 tracepoint 上逐条打印谁打开了哪个文件追求极致性能时还有rawtracepoint短名rt同样的挂点、更低的开销。完整细节见 docs/language.md。4️⃣ fentry / fexitBTF 加持的近零开销内核追踪fentry/fexit 是内核函数追踪的新一代方案早期叫 kfunc/kretfunc旧名仍可用与 kprobe 目标相同但优势明显基于eBPF trampoline机制调用开销接近于零利用BTF 类型信息在编译期自动推导参数类型不需要手动类型转换且对内核签名的小改动更稳健参数通过args对象按名字访问args.fd、args.skbfexit 可以拿到入参这是它相比 kretprobe 的一大优势短名ffentry、frfexit要求内核提供 BTF可用bpftrace --info确认还有fentry:bpf:...变体可以直接挂在正在运行的其他 BPF 程序上用于调试 BPF 程序本身。fexit:fget { printf(fd %d name %s\n, args.fd, str(retval.f_path.dentry.d_name.name)); }完整细节见 docs/language.md。⚖️ 选型指南kprobe、uprobe、tracepoint、fentry 怎么选探测点追踪目标参数访问稳定性 / 开销适用场景kprobe任意内核函数argN 手动转换动态插桩开销中等没有 BTF、或需要按偏移量挂函数中间fentry任意内核函数args自动类型需 BTF开销近零新内核上追踪内核函数的首选tracepoint内核标准事件args自动类型最稳定开销低系统调用、网络、调度器等标准化事件uprobe用户态函数 / 库argNDWARF 时为args动态插桩应用层调试malloc、readline 等一句话决策追标准事件选 tracepoint追内核函数选 fentry有 BTF 时否则 kprobe追用户程序选 uprobe应用自带 USDT 探针时则用usdt短名U。 实战追踪谁打开了文件把前面的知识串起来——追踪 open 系统调用时入口和出口要配对入口先记下文件名出口再按线程把文件名和返回码文件描述符或负 errno关联起来。官方工具 tools/opensnoop.bt 就是这个模式的完整实现运行后可以看到PID COMM FD ERR PATH 37421 bpftrace 33 0 /sys/kernel/debug/tracing/events/syscalls/...类似的现成工具execsnoop、tcplife、runqlat 等都在 tools/ 目录下是学习各种探测点用法的最佳范本所有探测点的速查表含 profile、hardware、interval 等 15 种见 docs/language.md。 小结用bpftrace -l/bpftrace -lv先列出探测点再动手写脚本可以少走 90% 的弯路kprobe / uprobe 灵活但参数靠argN硬取适合哪里都能插的动态场景tracepoint / fentry 基于静态定义与 BTF 类型参数按名访问脚本更稳、更易读是官方推荐方向记住短名k、kr、u、ur、t、f、fr能让脚本更短更好维护。掌握这四种探测点你就拿到了 bpftrace 内核追踪与用户态调试的钥匙下一步不妨直接读一读 tools/opensnoop.bt 的源码感受真实工具中 tracepoint 的写法。【免费下载链接】bpftraceHigh-level tracing language for Linux项目地址: https://gitcode.com/gh_mirrors/bp/bpftrace创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

vovix23实战项目性能优化:从卡顿到飞快的避坑指南

vovix23实战项目性能优化:从卡顿到飞快的避坑指南

vovix23实战项目性能优化:从卡顿到飞快的避坑指南 刚学会vovix23的语法,打开IDE想跑个 实战项目 ,结果页面转圈半天没反应?别急,这坑我踩过,你也别急着怀疑自己代码写错了。…

2026/9/22 11:40:11 阅读更多 →
论文前言写什么?3步拆解逻辑,附完整示例

论文前言写什么?3步拆解逻辑,附完整示例

论文前言写什么?3步拆解逻辑,附完整示例 面试被问“原理”答不上来,是不是让你抓狂?别慌,这就像写论文时卡在开头,明明干了活却说不清价值。今天不聊虚的,直接上 完整示例 ,把“论文前言写什么”这堵墙给你砸透。…

2026/9/23 13:51:21 阅读更多 →
QM 通过普通凭证使用 Composio:技能、SDK 供应与权限边界全解析

QM 通过普通凭证使用 Composio:技能、SDK 供应与权限边界全解析

QM 通过普通凭证使用 Composio:技能、SDK 供应与权限边界全解析 【免费下载链接】qm Multiplayer agent harness for work. 项目地址: https://gitcode.com/gh_mirrors/qm6/qm QM 将 Composio 集成进自身沙箱计算机,通过一个名为 composio 的技能…

2026/9/22 11:39:10 阅读更多 →

最新新闻

区域二元线性回归图像恢复:原理、Python实现与调参指南

区域二元线性回归图像恢复:原理、Python实现与调参指南

简介:这份资源面向人工智能课程学习者与期末作业备考者,提供一套基于区域二元线性回归模型完成图像恢复的完整Python实现方案。实验从生成受损图像入手,通过noise_mask_image接口为原图叠加每行噪声比率为0.8、0.4、0.6的{0,1}噪声遮罩&#…

2026/9/23 17:57:12 阅读更多 →
计算机网络基础知识实战:TCP三次握手、UDP打流与抓包排障指南

计算机网络基础知识实战:TCP三次握手、UDP打流与抓包排障指南

简介:这份PDF资料面向准备技术面试的开发者与计算机专业学生,系统梳理计算机网络核心考点,帮助读者在面试与工程实践中理清网络通信的底层逻辑。内容围绕网络模型、TCP/IP协议族及协议细节展开,涵盖OSI七层参考模型与TCP/IP四层模…

2026/9/23 17:57:12 阅读更多 →
CUDA加速道路裂缝检测:Python调度+GPU核心实现

CUDA加速道路裂缝检测:Python调度+GPU核心实现

简介:本资源是一套基于Python实现的道路裂缝缺陷检测完整课程设计项目,面向计算机视觉初学者、高校本科生及课程设计实践者,解决道路基础设施巡检中自动化识别裂缝的技术需求。压缩包共439个文件,含237张PNG与171张JPG格式的实拍/…

2026/9/23 17:57:12 阅读更多 →
Rocky9.2离线环境下基于HTTP协议搭建yum源全指南

Rocky9.2离线环境下基于HTTP协议搭建yum源全指南

简介:内网环境中,为多台Linux服务器搭建本地YUM源,是解决软件安装与更新困难的常用方案,同时能保证各服务器软件版本的一致性。一份针对Rocky Linux 9.2的实操教程,系统讲解了基于HTTP方式搭建局域网YUM源的方法&#…

2026/9/23 17:57:12 阅读更多 →
一文搞懂omg命令,3步搞定项目落地不踩坑

一文搞懂omg命令,3步搞定项目落地不踩坑

一文搞懂omg命令,3步搞定项目落地不踩坑 很多开发者刚接触新工具时,常陷入“语法背熟却跑不通项目”的困境。比如你查了资料,知道omg命令能做什么,但真到搭环境、配参数时,又卡在半路。今天这篇文章,就用一个实战小项目,带你一文搞懂omg命令…

2026/9/23 17:57:12 阅读更多 →
3步搞定阿里云邮箱企业版配置,一文搞懂避坑指南

3步搞定阿里云邮箱企业版配置,一文搞懂避坑指南

3步搞定阿里云邮箱企业版配置,一文搞懂避坑指南 配置SMTP环境就卡半天?别急,很多人卡在认证方式或端口设置上。本文旨在 一文搞懂 阿里云邮箱企业版的核心配置逻辑。…

2026/9/23 17:56:12 阅读更多 →

日新闻

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A…

2026/9/23 0:00:23 阅读更多 →
2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我 刚把开发环境的显示器从1080P换到2K,跑老项目直接报错,版本升级后 API…

2026/9/23 0:01:25 阅读更多 →
3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点 官方文档翻了三遍还是云里雾里?别急,美眉图在实战项目中常被用来做数据可视化,但它的原理比你想的简单。今天咱们直接上手,用一个完整的小项目把美眉图跑通,不再死磕那些冗长的理论说明。…

2026/9/23 0:01:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →