stap 命令

SystemTap accepts script as command line option or external file, for example:

* Command-line script is passed with `-e` option
   `# stap -e ‘probe syscall.write { printf("%d\n", $fd); }‘ [arguments]`
 * External file as first argument:
   `# stap syscalls. [arguments]`

SystemTap command line arguments may be passed to a script, but it distingushes their types: numerical arguments are accessible with `$` prefix: `$1`, `$2` ... `$n` while string arguments have `@` prefix: `@1`, `@2` ... `@n`

Here are some useful `stap(1)` options:

* `-l PROBESPEC` accepts probe specifier without `probe` keyword (but with wildcards) and prints all matching probe names (more on wildcards in [Probes][lang/probes]). `-L` will also print probe arguments and their types. For example:
`# stap -l ‘scsi.*‘`
* `-v` -- increases verbosity of SystemTap. The more letters you passed, the more diagnostic information will be printed. If only one `-v` was passed, `stap` will report only finishing of each stage.
* `-p STAGE` -- ends stap process after _STAGE_, represented with a number starting with 1 (_parse_).
* `-k` -- stap tool won‘t delete SystemTap temporary files created during compilation (sources and kernel modules kept in `/tmp/stapXXXX` directory),
* `-g` -- enables Guru-mode, that allows to bind to blacklisted probes and write into kernel memory along with using Embedded C in your scripts. Generally speaking, it allows dangerous actions.
* `-c COMMAND` and `-x PID` -- like those in DTrace, they allow to bind SystemTap to a specific process
* `-o FILE` -- redirects output to a file. If it already exists, SystemTap __rewrites__ it.
* `-m NAME` -- when compiling a module, give it meaningful name instead of `stap_<gibberish>`.

When SystemTap needs to resolve address into a symbol (for example, instruction pointer to a corresponding function name), it doesn‘t look into libraries or kernel modules.

Here are some useful command-line options that enable that:

* `-d MODULEPATH` -- enables symbol resolving for a specific library or kernel module. Note that in case it is not provided, `stap` will print a warning with corresponding `-d` option.
* `--ldd` -- for tracing process -- use `ldd` to add all linked libraries for a resolving.
* `--all-modules` -- enable resolving for all kernel modules

#### SystemTap example

Here is sample SystemTap script:

#!/usr/sbin/stap

probe syscall.write { if(pid() == target())

printf("Written %d bytes", $count); }

Save it to `test.stp` and run like this:

[email protected]# stap /root/test.stp -c "dd if=/dev/zero of=/dev/null count=1"

_Q__: Run SystemTap with following options: `# stap -vv -k -p4 /root/test.stp `, find generated directory in `/tmp` and look into created C source.

__Q__: Calculate number of probes in a `syscall` provider and number of variables provided by `syscall.write` probe:

# stap -l ‘syscall.*‘ | wc -l
# stap -L ‘syscall.write‘

时间: 2025-01-05 00:14:01

stap 命令的相关文章

【技术干货】听阿里云CDN安防技术专家金九讲SystemTap使用技巧

1.简介 SystemTap是一个Linux非常有用的调试(跟踪/探测)工具,常用于Linux 内核或者应用程序的信息采集,比如:获取一个函数里面运行时的变 量.调用堆栈,甚至可以直接修改变量的值,对诊断性能或功能问题非 常有帮助.SystemTap提供非常简单的命令行接口和很简洁的脚本语 言,以及非常丰富的tapset和例子. 2.何时使用 定位(内核)函数位置 查看函数被调用时的调用堆栈.局部变量.参数 查看函数指针变量实际指的是哪个函数 查看代码的执行轨迹(哪些行被执行了) 查看内核或者进

[译] SystemTap

SystemTap 什么是system Tap ? SystemTap 提供环境用来获得更多关于内核几乎所有组件的信息,用以被进一步分析.SystemTap也可以被当作一种工具,为用户研究和监控内核详情提供便利. 运行system tap需要些什么 ? - 需要如下组件包 : kernel-debuginfo kernel-debuginfo-common kernel-devel systemtap-runtime gcc 如何运行 SystemTap ? SystemTap脚本通过stap命

PostgreSQL SystemTap on Linux 转

PostgreSQL 支持动态跟踪, 可以通过dtrace或者systemtap工具统计相关探针的信息. 安装systemtap yum install systemtap kernel-debuginfo kernel-devel 将安装以下包 systemtap-devel-1.8-6.el5 systemtap-client-1.8-6.el5 systemtap-runtime-1.8-6.el5 后面将使用的stap命令 [[email protected]-172-16-3-39 ~

每个Linux用户都应该了解的命令行省时技巧

伯乐在线导读:有网友在问答网站Quora上提问:“有哪些省时小技巧,是每个Linux用户都应该知道的?” Joshua Levy 平常就在 Linux 平台工作,并且他积累了不少实用命令行技巧,他在回复中精选出一部分.对技术用户来说,这些技巧挺重要或实用,但知道的人并不多.下文略有点长,一般来 说,用户也不需要对全部内容都了解,但为了达到省时方便的目的,Joshua Levy  仍不遗余力做了校对,以保证列出的每一条都值得一读,前提是你是一位Linux重度用户. 为了获取文中提到的一个命令的更多

Linux -高阶命令行技巧

熟练地操作命令行是一项常常被我们忽视的技能,又或者说我们将它看的太过神秘.不过作为一名软件工程师,掌握这一技能可以很大程度上提升我们工作的灵活性,提高工作效率.这篇文章是我在与 Linux 打交道的过程中总结出的一些小技巧.有些很基础,有些也相当专业,不太好懂.这篇文章不长,不过如果你能在工作中充分使用这里介绍的技能的话,那你也知之甚多了. 这里的许多内容一开始已出现在 Quora,但考虑到 Github 的用户性质,他们比我有天赋而且可以随时提出改进意见,因此使用 Github 更合适.如果你

高效Linux用户需要了解的命令行技能

摘自:1.http://www.lingcc.com/2013/03/22/12282/ 内容:1.基本命令: 了解基本的bash,通读整个bash man page 学习vim 了解SSH,基本的无密码验证方式:   熟悉Bash中常用的任务管理命令 &,Ctrl-Z,Ctrl-C,jobs,fg,bg,kill 等.  基本的文件管理命令 ls, ls-l, less, head, tail, tail -f, ln, ln -s, chmod, chown, du, du -sk *, d

每个 Linux 用户都应该知道的命令行技巧

每个 Linux 用户都应该知道的命令行技巧 原创 2015-09-11 伯乐在线 程序员的那些事 [伯乐在线导读]:有网友在问答网站Quora上提问:“有哪些省时小技巧,是每个Linux用户都应该知道的?” Joshua Levy 平常就在 Linux 平台工作,并且他积累了不少实用命令行技巧,他在回复中精选出一部分.对技术用户来说,这些技巧挺重要或实用,但知道的人并不多.下文略有点长,一般来说,用户也不需要对全部内容都了解,但为了达到省时方便的目的,Joshua Levy 仍不遗余力做了校对

常用命令汇总

Android相关: adb shell ps 得到进程号 adb shell am dumpheap 进程号  /storage/sdcard0/mem.hprof   //倒出hprof文件 adb reboot bootloader//重启进入fastboot模式 fastboot flash system system.img make snod//产生一个新的系统映像system.img make ramdisk//编译ramdisk make userdateimage//编译use

高效Linux用户需要了解的命令

下面介绍的都是一些命令行工具,这些工具在几位回答者的日常工作中都很有用.对于任何不了解的命令,请使用"man <COMMANDNAME>"查看,或者使用Google.有些命令需要先用 yum, apt-get install 命令安装. Table of Contents 1 基本命令 2 一些表达式 3 日常使用命令 4 数据处理 5 系统调试 1 基本命令 了解基本的bash 通读整个bash man page. 学习VIM 在Linux系统上,虽然你有Emacs和Ec