gpt4 book ai didi

linux - 处理 systemtap 用户空间脚本(变量)中的长探测路径?

转载 作者:太空宇宙 更新时间:2023-11-04 12:18:21 25 4
gpt4 key购买 nike

我正在尝试使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com