2

我正在关注 SystemTap 教程,我正在尝试执行第 2.3 节 - “跟踪。练习”中的练习 1 。该-L选项似乎永远不会起作用。我得到了这个脚本:

probe kernel.function("*nit*"){}

我在终端中输入:

$ stap -L PROBE t.stp

什么也没有发生。

4

5 回答 5

5
$ stap -L 'kernel.function("blahblah")'

Systemtap 很棒,但文档很差。

于 2012-05-16T04:32:46.140 回答
4

来自man stapsystemtap*-1.7-2.fc15.x86_64安装了 RPM)

   stap [ OPTIONS ] -l PROBE [ ARGUMENTS ]
   stap [ OPTIONS ] -L PROBE [ ARGUMENTS ]

   -l PROBE
          Instead of running a probe script, just list all available probe
          points  matching  the given single probe point.  The pattern may
          include wildcards and aliases, but not comma-separated  multiple
          probe  points.  The process result code will indicate failure if
          there are no matches.

   -L PROBE
          Similar to "-l", but list probe points  and  script-level  local
          variables.

“探测点”指的是 'kernel.function("blahblah")' 等。之前没有关键字“probe”,之后没有探测处理程序。

于 2012-05-16T16:10:40.210 回答
1
stap -L kernel.function("*nit*") | sort
于 2020-06-08T18:24:32.733 回答
1

您可以尝试以下示例。

获取所有内核函数的列表。

$ stap -l 'kernel.function("*")' | 种类

kernel.function("vfs_read@/build/linux-lts-xenial-Hu9lgy/linux-lts-xenial-4.4.0/fs/read_write.c:440") [....]

获取内核函数和参数(局部变量)

$ stap -L 'kernel.function("*")' | grep vfs_read

kernel.function("vfs_read@/build/linux-lts-xenial-Hu9lgy/linux-lts-xenial-4.4.0/fs/read_write.c:440") $file:struct file* $buf:char* $count :size_t $pos:loff_t*

[……]

于 2016-09-06T03:45:29.223 回答
0

只是为了补充比我更有学识的人所说的:

stap -L 'module("module-name-here").function("*")'

对于常规内核探测:

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

希望这对将来的其他人有所帮助!

于 2017-11-12T02:02:45.070 回答