SystemTap工具的使用基础

简介: systemtap工具的安装准备工作uname -a查看当前内核版本是哪一个,然后使用yum install kernel-devel安装kernel debuginfo包rpm -qi kernel-devel找到内核构建的详细信息,然后去对应发布网站上找kernel-debuginfo和kernel-debuginfo-common包。

systemtap工具的安装

准备工作

uname -a

查看当前内核版本是哪一个,然后使用

yum install kernel-devel

安装kernel debuginfo包

rpm -qi kernel-devel

找到内核构建的详细信息,然后去对应发布网站上找kernel-debuginfo和kernel-debuginfo-common包。

安装systemtap包

yum install systemtap

测试

完成安装后可以通过下面命令测试systemtap

stap -ve ‘probe begin { print(“hello world\n”) exit()}’

进行测试,看看systemtap有无安装成功。

systemtap常规命令

查看某个函数可以查看的target变量

下面命令演示查看__lookup_hash()函数返回时刻可以查看到的变量

stap -ve ‘probe kernel.function(“__lookup_hash”).return’ //查看__lookup_hash()函数返回时刻可以systemtap工具可以查看的target变量。
kernel.function(“__lookup_hash@fs/namei.c:1383”).return $return:struct dentry* $name:struct qstr* $base:struct dentry* $flags:unsigned int $need_lookup:bool

在上表中显示了lookup_hash在文件中的行号,显示了名为$return 的变量,其实这个return变量就是systemtap表示函数返回值的。而$name,$base,$flag我们对着linux源码看发现这是__lookup_hash的三个入参。
下面命令可以查看__lookup_hash函数入口可以查看的变量

stap -L ‘probe kernel.function(__lookup_hash)’

使用systemtap打印目标函数的变量

systemtap支持print()和printf()函数,其中printf使用语法和c语言一致。支持%s,%d,%x格式

常用变量

内部变量名 功能 其他
$$locals 探测点上所有的本地变量(含参数) n/a
$$parms 探测点上函数的参数 n/a
$$returns 探测点上所有的返回值 只对return probe生效

变量的显示方式

在systemtap里凡是以$开头的变量都是目标变量,如果目标变量结构体指针或者结构体对象,那么可以使用->直接访问其成员。例如上例中:

$return->d_inode //就是__lookup_hash()返回值dentry* 的d_inode成员的值。

常规情况下,printf()打印target变量时刻,只打印其值。如果需要将其成员(指针类型的target需要将其指向的对象的成员展开)可以在target变量后面加$的方式例如:

$return$ //显示返回值指向的dentry所有成员。

一般情况下对struct的展开只会到成员值一级,如果相对成员内部继续展开可以在目标变量后面跟$$

if逻辑语句

在systemtap中支持逻辑if语句格式为:

if (expr) {
语句
}

逻辑语句支持以下比较
==,!=,>=,>,<,<=

例子

下面例子将打印__lookup_hash中return返回dentry*里inode指向的i_ino子成员

stap -ve ‘probe kernel.function(“__lookup_hash”).return { if (return!=0) { if(return!=-2) { if (return->d_inode!=0){ printf(return dentry:%x,dentry->d_inode->i_ino:%x,return,$return->d_inode->i_ino)}}}}’ -o zxy.txt

这一例子中-o zxy.txt的意思就是将结果写入文件zxy.txt中(默认输出到控制台)

目录
相关文章
|
3月前
|
Linux 数据处理 Windows
探索Linux中的hexdump命令:数据处理的瑞士军刀
`hexdump`是Linux下的命令行工具,用于以十六进制格式显示和解析二进制文件内容,适用于分析文件结构、查找特定字节序列。它支持多种显示格式(如八进制、十进制)、数据分组和过滤功能。常用参数包括`-C`(混合十六进制和ASCII显示)、`-d`(十进制格式)、`-o`(八进制格式)、`-s`(跳过字节)、`-n`(显示字节数)。通过与`grep`等工具结合使用,可实现更复杂的任务。注意文件大小和选择合适显示格式,对于大文件使用`-n`限制输出。
|
4月前
|
缓存 Linux iOS开发
【C/C++ 集成内存调试、内存泄漏检测和性能分析的工具 Valgrind 】Linux 下 Valgrind 工具的全面使用指南
【C/C++ 集成内存调试、内存泄漏检测和性能分析的工具 Valgrind 】Linux 下 Valgrind 工具的全面使用指南
506 1
|
4月前
|
缓存 Linux 开发工具
【命令行魔法:掌握Linux基础工具开发的独门技艺】(一)
【命令行魔法:掌握Linux基础工具开发的独门技艺】
|
4月前
|
Linux Shell 开发工具
【命令行魔法:掌握Linux基础工具开发的独门技艺】(二)
【命令行魔法:掌握Linux基础工具开发的独门技艺】
|
4月前
|
缓存 小程序 Linux
【命令行魔法:掌握Linux基础工具开发的独门技艺】(四)
【命令行魔法:掌握Linux基础工具开发的独门技艺】
|
4月前
|
IDE 编译器 Linux
【命令行魔法:掌握Linux基础工具开发的独门技艺】(三)
【命令行魔法:掌握Linux基础工具开发的独门技艺】
An工具介绍之3D工具
An工具介绍之3D工具
459 0
An工具介绍之3D工具
|
监控 网络协议 Unix
快速学习Linux常用性能监控命令及工具
在linux系统环境的测试开发过程中,我们常常需要评估系统性能,尤其在性能测试工作中,我们需要通过系统资源的监控,从而分析定位系统的性能瓶颈。
187 0
快速学习Linux常用性能监控命令及工具