System 学习笔记

官方文档,例子,练习

2 Tracing 

(1)stap -L 'kernel.function("*nit")'

 (3) 因为内联函数没有唯一的返回点,所以

probe kernel.function("*@net/socket.c").inline{
 printf("%s -> %s\n",thread_indent(1),probefunc())
}
probe kernel.function("*@net/socket.c").return{
 printf("%s <- %s\n",thread_indent(-1),probefunc())
}


不能返回整齐的调用与返回缩进排版。


3.使用systemtap获得某一系统调用的参数或返回值或频率.

获得参数:

cat > myopen_vars.stp

probe kernel.function("sys_open"){//这里也可以加.call的后缀。不加时,默认为.call

 printf("%s\n",$$vars)

/*or  printf("%s\n",$$parms) 使用vars 时输出多一个参数*/

}


vars = filename=0xb9e9024c flags=0x8000 mode=0x1b6 ret=0x5
parms = filename=0xb9e9024c flags=0x8000 mode=0x1b6


获得返回值

cat > myopen_return.stp

probe kernel.function("sys_open").return{/*注意,这里一定要有后缀。否则system的分析通不过*/

   printf("%s\n",$$return)

}

此时返回的是地址。

如果使用printf("%d\n",$return)

则返回的是长整型数值。


$$打头的扩展为了字符串类型。$开头的是长整型


获得使用频率

cat  > open_f.stp

global counts = 0/*注意count是系保留字,不能使用。所以用了counts*/

probe kernel.function("sys_open"){

  printf("counts = %x\n",++counts)/*以十六进制显示*/

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值