[root@BL480-64 jinyz]# more topcaller.stp global bt probe syscall.open { if (execname() == "find") {bt[tid()] = backtrace()} } probe end { foreach (fn in bt-) { # Sort by call count (in decreasing order) printf("%d==%s\n", fn, bt[fn]) print_stack(bt[fn]) } exit() } 输出结果: [root@BL480-64 jinyz]# stap topcaller.stp 31812==0xffffffff80031061 0xffffffff8005d28d 0xffffffffda000000 0xffffffffffda0000 0xffffffffffffda00 0xffffffffffffffda 0xfffffffffff 0xffffffff80031061 : sys_open+0x1/0x17 [kernel] 0xffffffff8005d28d : add_disk_randomness+0xb6c/0x178b [kernel] 0xffffffffda000000 : packet_exit+0x59be830f/0x7f1e830f [kernel] 0xffffffffffda0000 : venosys_1+0x79f400/0x0 [kernel] 0xffffffffffffda00 : venosys_1+0x9fce00/0x0 [kernel] 0xffffffffffffffda : venosys_1+0x9ff3da/0x0 [kernel] 0x00000fffffffffff 31814==0xffffffff80031061 0xffffffff8005d28d 0xffffffffda000000 0xffffffffffda0000 0xffffffffffffda00 0xffffffffffffffda 0xfffffffffff 0xffffffff80031061 : sys_open+0x1/0x17 [kernel] 0xffffffff8005d28d : add_disk_randomness+0xb6c/0x178b [kernel] 0xffffffffda000000 : packet_exit+0x59be830f/0x7f1e830f [kernel] 0xffffffffffda0000 : venosys_1+0x79f400/0x0 [kernel] 0xffffffffffffda00 : venosys_1+0x9fce00/0x0 [kernel] 0xffffffffffffffda : venosys_1+0x9ff3da/0x0 [kernel] 0x00000fffffffffff 输出结果分析,add_disk_randomness函数调用sys_open系统调用,以后再研究具体分析find命令的源代码。
4、 使用topcaller.stp脚本,列出系统调用堆栈
脚本如下: