最近几天再看systemtap的官方文档,已经被无所不能的systemtap给深深折服。
1. SystemTap Beginner’s Guide
2. Tutorial A walk-through that give a taste of SystemTap.
3. Language Reference: A compendium of SystemTap scripting language elements
下面就介绍一下使用systemtap输出函数的调用栈
先举个简单的例子:查看sum函数的调用栈
#include<stdio.h>
void sum(int a, int b)
{
int c = a + b;
}
int main()
{
int i = 1;
sum(1, i);
}
sudo stap -d a.out -e 'probe process("a.out").function("sum") {print_usyms(ubacktrace())}' -c ./a.out
WARNING: Child process exited with status 2
0x4004b4 : sum+0x0/0x17 [/home/game/flameGraph/a.out]
0x4004e9 : main+0x1e/0x25 [/home/game/flameGraph/a.out]
0x7ff25d79976d : 0x7ff25d79976d [/lib/x86_64-linux-gnu/libc-2.15.so+0x2176d/0x3be000]
再试试服务器的redis,setCommand的调用栈
sudo stap -d /usr/local/bin/redis-server -e