现在的位置: 首页 > 综合 > 正文

System 学习笔记

2013年10月16日 ⁄ 综合 ⁄ 共 900字 ⁄ 字号 评论关闭

官方文档,例子,练习

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)/*以十六进制显示*/

}

抱歉!评论已关闭.