安装stap工具
sudo apt-get install systemtap
测试stap 工具是否可用
sudo stap -ve ‘probe begin { log(“hello systemtap!”) exit() }’
增加当前ubuntu版本对应的linux kernel 符号表所在的官方仓库
codename=$(lsb_release -c | awk ‘{print $2}’)
sudo tee /etc/apt/sources.list.d/ddebs.list << EOF
deb http://ddebs.ubuntu.com/ ${codename} main restricted universe multiverse
deb http://ddebs.ubuntu.com/ ${codename}-security main restricted universe multiverse
deb http://ddebs.ubuntu.com/ ${codename}-updates main restricted universe multiverse
deb http://ddebs.ubuntu.com/ ${codename}-proposed main restricted universe multiverse
EOF
下载linux-image的符号表
sudo apt-get update
sudo apt-get install linux-image-$(uname -r)-dbgsym
新建一个 测试用的 1.stap 脚本文件
$ cat 1.stap
probe begin
{
printf (">>>begin...\n")
}
probe syscall.openat
{
printf ("%s(%d) open (%s)\n", execname(), pid(), argstr)
}
probe timer.ms(4000) # after 4 seconds
{
exit ()
}
probe end
{
print ("<<<end.\n")
}
运行1.stap脚本
sudo stap 1.stap
在此期间,新开一个命令窗口,随便运行一个 ls 命令,会看到如下抓到的log,可以看到,有很多次的 open() 系统调用被捕捉到了: