我正在关注 SystemTap 教程,我正在尝试执行第 2.3 节 - “跟踪。练习”中的练习 1 。该-L
选项似乎永远不会起作用。我得到了这个脚本:
probe kernel.function("*nit*"){}
我在终端中输入:
$ stap -L PROBE t.stp
什么也没有发生。
我正在关注 SystemTap 教程,我正在尝试执行第 2.3 节 - “跟踪。练习”中的练习 1 。该-L
选项似乎永远不会起作用。我得到了这个脚本:
probe kernel.function("*nit*"){}
我在终端中输入:
$ stap -L PROBE t.stp
什么也没有发生。
$ stap -L 'kernel.function("blahblah")'
Systemtap 很棒,但文档很差。
来自man stap
(systemtap*-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”,之后没有探测处理程序。
stap -L kernel.function("*nit*") | sort
您可以尝试以下示例。
获取所有内核函数的列表。
$ 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*
[……]
只是为了补充比我更有学识的人所说的:
stap -L 'module("module-name-here").function("*")'
对于常规内核探测:
stap -L 'kernel.function("*")'
希望这对将来的其他人有所帮助!