Monthly Archives: February 2014

systemtap初学者小记两笔

一直对systemtap挺感兴趣的,但是一直也没怎么好好用过,一些简单的东西也是用过就忘。最近有稍微看了下,记录两笔吧,省着以后又忘了。

现在我对systemtap的使用还是很初级的,基本就是看看函数的参数值,某个变量的值。

首先要看一个函数都有什么是可以查看的。比如我想看ext4_unlink这个函数。这个时候可以使用stap -L来列出systemtap可以查看的函数参数。

# stap -L 'module("ext4").function("ext4_unlink")'
module("ext4").function("ext4_unlink@fs/ext4/namei.c:2177") $dir:struct inode* $dentry:struct dentry* $__func__:char[] const

以 $ 开头的变量都是在systemtap脚本里查看的,比如以下stp脚本对 $dir->i_ino的引用

probe module("ext4").function("ext4_unlink")
{
        printf("%s: comm %s, pid %d, dirinode = %d\n", probefunc(), execname(),
                pid(), $dir->i_ino);
}

函数的参数知道怎么看了,那么函数的自动变量呢?我用statement这个probe point。比如我想看fs/namei.c:2663初一个叫error的自动变量的值

probe kernel.statement("*@fs/namei.c:2663")
{
        printf("%s: comm %s, pid %d, error = %d\n", probefunc(), execname(),
               pid(), $error);
}

可以参考systemtap的文档