systemtap 使用技巧

 时间:2024-10-31 15:54:58

1、定位函数位置。 比较典型的是定位内核系统调用函数在哪个文件上,以往我都是source insight或者grep找,比如要找open系统调用在内核的实现,就这样:

systemtap 使用技巧

2、查看实际的函数。 如果对nginx或者内核代码有点了解的,可能知道很多地方数据结构里面用到了函数指针,这是C语言里面向对象思想的编程方式,非常有用,但对看代码的人来说就不太方便了。

systemtap 使用技巧

3、查看一个函数里面能在哪一行设置probe以及能获取哪些变量。 Linux内核的copy_process函数比较长,但被编译器优化了不少,在一些行上设置不了probe或者获取不了局部变量。设置行数不对或者获取不到变量符号就容易得到正面这些错误:

systemtap 使用技巧

4、获取函数参数。 我们来看一下sys_open的代码: 再用stap -L来看一下sys_open能设置哪些probe和能获取哪些变量:

systemtap 使用技巧

5、打印__user字符串。 在内核里宏__user是给地址加上一个属性,指定这个地址是用户态地址,在内核里不能直接用,需要转换才能用。我们在SystemTap代码里面不能直接用user_string或者kernel_string,否则运行时出现下面这个错误:

systemtap 使用技巧

6、想要打印__user限定的字符串,比如打印sys_open的第一个参数filename,要像下面这样:

systemtap 使用技巧

7、打印函数调用堆栈。 一般打印函数调用堆栈,用户进程的话直接gdb上去在文件行数或者函数设置一个断点,等待断点停下来后,用gdb命令backtrace(缩写bt)就能得到调用堆栈了,这样很有用,不管是学习新代码或者debug时都非常有用,比如在学nginx的时候,里面很多函数指针,用source insight、understand、vim+ctag都很难把代码流程读通,还是让代码运行起来后gdb上去设置断点bt一下就知道了。

systemtap 使用技巧

8、定义指定类型的变量。 我在看SystemTap_Beginners_Guide文档的时候,看到nettop.stp这个例子,就试着运行一下:

systemtap 使用技巧
  • 插画留学作品集准备流程和思路
  • qq换肤如何操作
  • 关于A股市场的真与假的问题
  • 香芋紫薯粥的做法
  • 香草播种知识简介之麝香锦葵、欧洲风轮菜
  • 热门搜索
    我们的节日中秋节手抄报 四年级科普手抄报 手抄报关于读书 关于校车的手抄报 五四青年节手抄报内容 快乐阅读手抄报内容 手抄报板块 应急避险手抄报 手抄报版面设计图花 关于古诗词的手抄报