使用uftrace跟踪bpf程序的执行

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 使用uftrace跟踪bpf程序的执行

作者

pengdonglin137@163.com

正文

uftrace专门用来跟踪用户态的C/C++以及Rust程序的执行,此外它也支持跟踪内核函数。

前一篇文章bpf_func_id是如何产生的?是以minimal为例,下面用uftrace跟踪一下执行流。为了可以让uftrace更好的工作,需要对Makefile稍加修改,给GCC加入-pg编译选项,用GCC编译的程序是bpf的用户态程序以及libbpf库,此外,libbpf默认使用的是-O2编译优化等级,有些函数会被内敛掉,对于分析跟踪日志有些不便,可以改成-O0,下面是修改方法:

对examples/c/Makefile的修改

diff --git a/examples/c/Makefile b/examples/c/Makefile
index 736750e..dca492e 100644
--- a/examples/c/Makefile
+++ b/examples/c/Makefile
@@ -21,7 +21,7 @@ VMLINUX := ../../vmlinux/$(ARCH)/vmlinux.h
# libbpf to avoid dependency on system-wide headers, which could be missing or
# outdated
 INCLUDES := -I$(OUTPUT) -I../../libbpf/include/uapi -I$(dir $(VMLINUX)) -I$(LIBBLAZESYM_INC)
-CFLAGS := -g -Wall
+CFLAGS := -g -O0 -Wall -pg
 ALL_LDFLAGS := $(LDFLAGS) $(EXTRA_LDFLAGS)

对libbpf的修改

diff --git a/src/Makefile b/src/Makefile
index 35c5724..1b95a6e 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -34,7 +34,7 @@ ALL_CFLAGS := $(INCLUDES)
 SHARED_CFLAGS += -fPIC -fvisibility=hidden -DSHARED
-CFLAGS ?= -g -O2 -Werror -Wall -std=gnu89
+CFLAGS ?= -g -pg -O0 -Werror -Wall -std=gnu89
 ALL_CFLAGS += $(CFLAGS)                                                \
              -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64              \
              -Wno-unknown-warning-option -Wno-format-overflow          \

修改完毕后,clean掉然后重新编译。

用uftrace进行跟踪,同时-a开启自动探测函数参数以及返回值的功能:

# uftrace record -a --no-event   ./minimal
# uftrace replay

下面是输出的日志:

minimal程序的跟踪日志

下面是fentry执行的跟踪日志:

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
5月前
|
编译器
【收藏】内核级利用通用Hook函数方法检测进程
【收藏】内核级利用通用Hook函数方法检测进程
|
9月前
|
监控
第四十一章 使用^%SYS.MONLBL检查例程性能 - 逐行监控报告示例
第四十一章 使用^%SYS.MONLBL检查例程性能 - 逐行监控报告示例
54 0
|
9月前
|
监控
第三十九章 使用^%SYS.MONLBL检查例程性能 - 开始监控
第三十九章 使用^%SYS.MONLBL检查例程性能 - 开始监控
46 0
|
9月前
|
Linux C++
【代码片段】Linux C++打印当前函数调用堆栈
【代码片段】Linux C++打印当前函数调用堆栈
259 0
|
9月前
|
NoSQL Java 编译器
|
9月前
|
NoSQL Shell C语言
GDB调试学习(一):单步执行和跟踪函数调用
GDB调试学习(一):单步执行和跟踪函数调用
207 1
|
缓存 监控 Ubuntu
Linux Command BCC 性能监视、网络动态跟踪工具
Linux Command BCC 性能监视、网络动态跟踪工具
|
Linux Shell 网络安全
使用Systemtap跟踪系统调用 (一)
SystemTap是一个诊断Linux系统性能或功能问题的开源软件。它使得对运行时的Linux系统进行诊断调式变得更容易、更简单。有了它,开发者或调试人员不再需要重编译、安装新内核、重启动等烦人的步骤。
692 0
使用Systemtap跟踪系统调用 (一)
|
开发工具 Android开发
【错误记录】OD 调试器附加进程时找不到进程 ( CE 工具可以附加进程 )
【错误记录】OD 调试器附加进程时找不到进程 ( CE 工具可以附加进程 )
981 0
【错误记录】OD 调试器附加进程时找不到进程 ( CE 工具可以附加进程 )