使用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日志并进行多维度分析。
相关文章
|
Ubuntu 前端开发 Linux
通过Ftrace实现高效、精确的内核调试与分析(上)
通过Ftrace实现高效、精确的内核调试与分析
|
NoSQL 关系型数据库 编译器
通过Ftrace实现高效、精确的内核调试与分析(下)
通过Ftrace实现高效、精确的内核调试与分析
|
6月前
|
NoSQL Java 编译器
|
6月前
|
NoSQL Shell C语言
GDB调试学习(一):单步执行和跟踪函数调用
GDB调试学习(一):单步执行和跟踪函数调用
134 1
|
Android开发
【Android 逆向】代码调试器开发 ( 等待进程状态改变 | detach 脱离进程调试 PTRACE_DETACH | 调试中继续运行程序 PTRACE_CONT )
【Android 逆向】代码调试器开发 ( 等待进程状态改变 | detach 脱离进程调试 PTRACE_DETACH | 调试中继续运行程序 PTRACE_CONT )
181 0
|
存储 运维 安全
基于VS调试分析 + 堆栈观察问题代码段
面对眼前两段有问题的代码,你会通过什么去解决这个问题?本文将通过调试进行逐步分析💻,带你步步观察程序的运行逻辑
21380 0
基于VS调试分析 + 堆栈观察问题代码段
|
Linux Shell 网络安全
使用Systemtap跟踪系统调用 (一)
SystemTap是一个诊断Linux系统性能或功能问题的开源软件。它使得对运行时的Linux系统进行诊断调式变得更容易、更简单。有了它,开发者或调试人员不再需要重编译、安装新内核、重启动等烦人的步骤。
649 0
使用Systemtap跟踪系统调用 (一)
|
存储 安全 前端开发
【译】eBPF 概述:第 5 部分:跟踪用户进程
【译】eBPF 概述:第 5 部分:跟踪用户进程
663 0