- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 systemtap
、Linux 4.2.0-42-generic#49~14.04.1-Ubuntu SMP 检测用户空间程序; stap --version
说:“Systemtap 翻译器/驱动程序(版本 2.3/0.158,Debian 版本 2.3-1ubuntu1.4(可信))”
所以我首先尝试获取所有可调用函数的列表,其中:
stap -L 'process("/home/username/pathone/subpathtwo/subpaththree/subpathfour/subpathFive/subpathsix/subpathSeven/subpatheight/myprogramab").function("*").call' 2>&1 |三通/tmp/stap
这有效 - 但是,请注意我的程序的绝对路径是巨大的。所以从 /tmp/stap
文件中,我读到了一些感兴趣的探针,然而,它们甚至更长,例如:
process("/home/username/pathone/subpathtwo/subpaththree/subpathfour/subpathFive/subpathsix/subpathSeven/subpatheight/myprogramab").function("DoSomething@/home/username/pathone/subpathtwo/subpaththree/subpathfour/subpathFive/src/BasicTestCodeFileInterface.cpp:201").call
...因为这对我来说很难阅读/不可读,所以我想做一些事情来将这一行分成更易读的部分。我首先想到的是使用变量,所以我尝试了这个 test.stp
脚本:
#!/usr/bin/env stap
global exepath = "/home/username/pathone/subpathtwo/subpaththree/subpathfour/subpathFive/subpathsix/subpathSeven/subpatheight/myprogramab"
global srcpath = "/home/username/pathone/subpathtwo/subpaththree/subpathfour/subpathFive/src"
probe begin {
printf("%s\n", exepath)
exit() # must have; else probe end runs only upon Ctrl-C
}
probe end {
newstr = "DoSomething@" . srcpath # concatenate strings
printf("%s\n", newstr)
}
这行得通,我可以运行 sudo stap/path/to/test.stp
,然后打印两个字符串。
但是,当我尝试在探测中使用这些字符串时,它们失败了:
探测进程(exepath).function("DoSomething@".srcpath."/BasicTestCodeFileInterface.cpp:201").call { ...
... 失败并显示:解析错误:预期的文字字符串或数字;看到:标识符“exepath”...
。
global tproc = process("/home/username/pathone/subpathtwo/subpaththree/subpathfour/subpathFive/subpathsix/subpathSeven/subpatheight/myprogramab")
... 因 解析错误而失败:预期的文字字符串或数字;看到:标识符“进程”...
。
那么,我有什么选择可以缩短脚本中的探测行?
最佳答案
最好的办法可能是使用宏:
@define part1 %( "/path/part/1" %)
@define part2 %( "/part/2" %)
probe process(@part1 @part2).function("...") { }
请注意(扩展为的宏)字符串文字之间没有显式连接运算符。解析器将自动连接它们,就像在 C 中一样。
关于linux - 处理 systemtap 用户空间脚本(变量)中的长探测路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46781773/
好吧,我正尝试在 SDT 标记上探索我自己的应用程序。我写了一个 systemtap 脚本来探测它,但是 systemtap 在第 5 次之前没有显示任何错误,然后在第 5 次(开始运行)之后,它就什
我想访问从 glibc 的“打开”函数返回的数据,例如文件名或文件描述符 我试试 probe process("/lib*/libc.so.*").function("open") { fd =
我想访问从 glibc 的“打开”函数返回的数据,例如文件名或文件描述符 我试试 probe process("/lib*/libc.so.*").function("open") { fd =
以下 systemtap 脚本无法编译: probe process("myexe").function("myFun").return { print("hi mom\n") } 它说: seman
我正在尝试在我的 GT-i9300 上加载一个简单的 Systemtap 模块 我得到了错误 Error inserting module '/sdcard/systemtap/modules/mon
我想知道如何在 systemtap 中添加对用户空间应用程序的支持。当我尝试跟踪任何用户空间程序时,它显示 CONFIG_UTRACE 未设置。 最佳答案 也许您的内核中没有设置 utrace 工具。
我正在尝试执行一个 systemtap 脚本。但是在执行过程中我遇到了以下语义错误。 stap -v -g netfilter.stp Pass 1: parsed user script and 9
我正在尝试找出这些写入我的闪存驱动器的原因。 deathstar> while true > do > dmesg|grep sdc|grep WRITE > sleep 3 > done [1796
我正在考虑使用 SystemTap 来监控生产服务器上的文件系统事件。 如何将数据从 SystemTap 生成的内核模块传输到另一个应用程序?我只看到 printf 作为从 SystemTap 脚本输
我有一个简单的 ST 脚本,它计算每个文件的进程 io 大小: global fds, counts probe syscall.open.return { if ( ( pid()
我想使用 systemtap 来提取我的 linux 生产服务器的详细信息。我的 systemtap 脚本是 global bt; global quit = 0 probe begin {
我想编写一个 SystemTap 脚本,它可以确定探测调用中当前 PID 的实际线程数。此时该数字应与/proc/4711/status 输出中显示的数字相同。 我的第一个方法是计算 kprocess
我正在尝试使用 systemtap 调试内核中的一些代码。我需要在该函数中打印局部变量的值,但看起来 systemtap 只能看到函数参数,而看不到该函数中定义的局部变量。这是我的探测脚本。 prob
我正在尝试创建硬链接(hard link),直接从 Systemtap 嵌入式 C 代码调用 sys_link。基本上,代码如下所示: function sys_link:long(oldname,
我正在寻找一些关于 systemtap 对性能影响的真实信息。我知道静态内核探测记录在他们网站的某处(带有统计信息),但是用户空间探测呢? 我在他们的邮件列表 (http://sourceware.o
我的系统是 Ubuntu,uname -r = 4.15.0-23-generic。我已经为内核安装了调试符号。 我的问题是: I am trying to use socket(AF_PACKET,
我想使用 systemtap 从远程访问中提取我的 linux 生产服务器的详细信息。对此,我有一些疑问: linux生产服务器和linux开发服务器是否有必要使用相同的内核。如果没有,那么如何添加对
我正在尝试运行此脚本,但它显示没有 tcp 连接有什么想法吗?操作系统:centos 6.3 #! /usr/bin/env stap probe begin { printf("%6s %16s
我想用 SystemTap 分析内核模块的缓存行为(#cache 引用、#cache 未命中等)。有一个在线示例脚本,展示了如何使用 SystemTap 读取性能事件和计数器,包括与缓存相关的事件和计
我的目标是分析内核模块中每个函数的执行时间。使用我在网上看到的示例脚本,我想出了以下脚本来满足我的需要。但偶尔我会得到计算延迟的负值。虽然,它们很少发生,但我想这表明我的脚本有问题。谁能帮我解决这个问
我是一名优秀的程序员,十分优秀!