使用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日志并进行多维度分析。
相关文章
|
4月前
|
监控 数据库
第四十章 使用^%SYS.MONLBL检查例程性能 - 逐行监控选项
第四十章 使用^%SYS.MONLBL检查例程性能 - 逐行监控选项
35 0
|
4月前
|
NoSQL Java 编译器
|
4月前
|
NoSQL Shell C语言
GDB调试学习(一):单步执行和跟踪函数调用
GDB调试学习(一):单步执行和跟踪函数调用
115 1
|
Windows
驱动开发:内核扫描SSDT挂钩状态
在笔者上一篇文章`《驱动开发:内核实现SSDT挂钩与摘钩》`中介绍了如何对`SSDT`函数进行`Hook`挂钩与摘钩的,本章将继续实现一个新功能,如何`检测SSDT`函数是否挂钩,要实现检测`挂钩状态`有两种方式,第一种方式则是类似于`《驱动开发:摘除InlineHook内核钩子》`文章中所演示的通过读取函数的前16个字节与`原始字节`做对比来判断挂钩状态,另一种方式则是通过对比函数的`当前地址`与`起源地址`进行判断,为了提高检测准确性本章将采用两种方式混合检测。
195 0
|
Android开发
【Android 逆向】代码调试器开发 ( 等待进程状态改变 | detach 脱离进程调试 PTRACE_DETACH | 调试中继续运行程序 PTRACE_CONT )
【Android 逆向】代码调试器开发 ( 等待进程状态改变 | detach 脱离进程调试 PTRACE_DETACH | 调试中继续运行程序 PTRACE_CONT )
172 0
|
Linux Shell 网络安全
使用Systemtap跟踪系统调用 (一)
SystemTap是一个诊断Linux系统性能或功能问题的开源软件。它使得对运行时的Linux系统进行诊断调式变得更容易、更简单。有了它,开发者或调试人员不再需要重编译、安装新内核、重启动等烦人的步骤。
618 0
使用Systemtap跟踪系统调用 (一)
|
开发工具 Android开发
【错误记录】OD 调试器附加进程时找不到进程 ( CE 工具可以附加进程 )
【错误记录】OD 调试器附加进程时找不到进程 ( CE 工具可以附加进程 )
900 0
【错误记录】OD 调试器附加进程时找不到进程 ( CE 工具可以附加进程 )