编辑
2025-01-20
记录知识
0
请注意,本文编写于 158 天前,最后修改于 59 天前,其中某些信息可能已经过时。

目录

一、了解bpftrace
二、命令演示

bpftrace是eBPF的高级调试语言,它能够简单的直接运行eBPF程序,本文基于eBPF的介绍上,以bpftrace为例,实践bpftrace的基本命令。

一、了解bpftrace

为了能够全面的了解bpftrace,建议大家了解如下仓库:

https://github.com/bpftrace/bpftrace

为了了解框架,可以查看如下图

image.png 如果看到这个图片,也不用慌,它主要介绍如下两点:

图中带颜色的框图是linux系统的主要功能模块 图中带箭头的,如果指向框图的,那么对应probe的类型 根据这些类型,我们可以通过bpftrace来引用从而调试内核。

如果进入这个仓库的,可以看到仓库的README.md,这里有bpftrace的示例,本文不基于这些事例来进行演示,而是自己测试一个示例do_sys_openat2,readme的示例大家可以自己瞧一瞧。

二、命令演示

为了文档延续性,这里还是以do_sys_openat2为例,首先需要查看bpftrace支持的跟踪点,如下

# bpftrace -l '*do_sys_openat2' kprobe:do_sys_openat2

可以看到,bpftrace支持kprobe类型的do_sys_openat2观测

# bpftrace -e 'kprobe:do_sys_openat2 { printf("PID=%d COMM=%s\n", pid, comm )}' Attaching 1 probe... PID=313 COMM=systemd-journal PID=313 COMM=systemd-journal PID=313 COMM=systemd-journal PID=313 COMM=systemd-journal PID=313 COMM=systemd-journal

这里和kprobe达到效果一致。