问题标签 [systemtap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
systemtap - 如何使用 systemtap $$param$$ 和 $$return$$ 显示双精度/浮点值
我正在使用 systemtap 来获取带有参数和返回值的调用图,但是 float 和 double 变量显示为?字符。有没有办法显示正确的值?
我的 systemtap 脚本是这样的:
以及一个简单的 C 程序代码进行测试:
运行上述代码的脚本的输出(注意 c 和 e 值,以及测试返回):
debugging - 将调试符号转换为文件和行号
我正在使用 strace 和 SystemTap 在系统调用时获取堆栈跟踪。我目前得到的显示的是函数名,而不是文件名和行号。ls
使用-k
选项的 strace 跟踪:
另一个来自 SystemTap的示例ls
,在示例中稍作修改strace.stp
:
如何转换十六进制数字以获取文件名和行号?
locking - 如何解释 Systemtap 的 futexes.stp 的输出
我试图在我的代码中找到锁争用,并在标准 systemtap 版本中找到了 futexes.stp。但是我对输出有几个问题:
所以这里有问题:
0x7f........堆栈地址的所有这些构造是什么?我确定它不是来自我的应用程序。这些库或内核互斥体(或 condvars)是否代表我的应用程序?我该如何验证?
那些地址短的“锁”是我的。我可以使用 gdb 的“信息符号”命令验证它们,但是从 stap 自动将其解码为符号的好方法是什么?
我正在使用构建在同一个机器上的 Linux 4.6.2 主线内核,以及来自他们的 git 存储库的最新 systemtap。我的 cruncher 应用程序是使用 -g 构建的,并且没有删除符号。
提前非常感谢!
docker - 在非特权 docker 容器中运行 SystemTap
是否可以在没有特权的 docker 容器中运行 SystemTap ?我已经安装/lib/modules
并/sys/kern/debug
在容器内,并授予容器所有功能,但这并没有帮助。虽然 SystemTap 确实安装了模块没有问题,但它无法在第 5 步中连接到模块并出现错误:无法打开模块控制通道。
linux - SystemTap 进程间通信
我正在考虑使用 SystemTap 来监视生产服务器上的 FileSystem 活动。
如何将数据从 SystemTap 生成的内核模块传输到另一个应用程序?我只看到 printf 作为从 SystemTap 脚本输出数据的一种方式,是否有某种套接字接口?
linux-kernel - SystemTap 脚本编译无法识别 kernel.xxx 探针
我在 ArchLinux 4.7.4-1 上运行 SystemTap,并按照ArchLinux Wiki上的说明使用重建的内核。SystemTap 的版本是:
我有 SystemTap 脚本:
使用选项运行的输出-vvv
是:
SystemTap 似乎无法识别kernel.xxxx
探针。如何让脚本在 ArchLinux 上成功运行?
systemtap - 如何在 systemtap 脚本内通过网络发送数据?
我正在使用 systemtap 来监控一些网络、锁定、任务唤醒统计信息,并且我想找到“println”(stap 指令)的替代方法,这将允许我将数据发送到远程(联网)目标(这个想法是避免所有磁盘访问,即使是临时文件)。
UDP就好了。
systemtap 脚本中有没有办法发送带有(文本)数据的网络数据包?我想过用管道连接到 netcat (nc),但希望避免它。
在 Google 上找不到答案(也许我没有选择正确的关键字集...),或者在用户手册中?
提前致谢。
c - 使用系统分流时如何避免“探测开销超过阈值”错误?
我试图用来stap
打印出程序调用的所有函数。我在网上做了一些研究,发现了这个脚本(称为para-callgraph.stp
):
打算像这样运行:
现在,当我运行它时,我遇到了一个问题。起初一切正常,但很快systemtap
将其打印到 stderr,然后退出:
在网上做一些研究告诉我,一个stap
启发式方法被触发并关闭了我,我可以通过添加两个标志-g
和--suppress-time-limits
. (这个建议在我的系统上得到了支持man stap
。)但是,该解决方案根本不起作用,命令:
打印一条非常相似的错误消息,然后退出:
为什么这个标志不是我的问题的适当解决方案?这个问题可以通过其他方式解决,还是 systemtap 根本不适合这种用例?
如果重要的话,我会在 32 位 Ubuntu VM 上运行它。
注意我最感兴趣的是为什么 systemtap 在这里失败,而不是使用其他软件完成相同事情的其他方法。(事实上,对于我的用例,上面的代码是对 systemtap 的滥用。)
systemtap - systemtap 用户字符串复制错误
我编写了一个 systemtap 脚本来分析 C++ 程序。在 systemtap 脚本中,我想提取一个类成员。
这是c ++类定义:
下面是 systemtap 脚本的代码片段:
当脚本运行时,它在此探测中失败并说“地址 0x0000075 处的用户字符串复制错误”。我猜这意味着“@cast(FldOrder, "CFldOrder")->cust_no->buf" 不是有效地址。
如果我用 gdb 调试这个程序并在“entrust.cpp:6614”位置中断,FldOrder.cust_no.buf 会正确显示。
如何修复脚本?
kill - 如何在 systemtap 脚本中获取终止信号发送者的主机名
所有,我在使用 systemtap 脚本时遇到问题。我不知道如何在 systemtap 脚本中获取 kill signal sender 的主机名。例如。我在服务器 'sf1' 中执行 kill -9 xclock_process_pid。同时,我运行 1.stap -x xclock_process_pid 来监控 xclock,在 'sf1' 中发送 kill -9 xclock_process_pid 时,有什么方法可以在 systemtap 脚本中获取服务器名称 'sf1'?
但我遇到了一些问题。我的 1.stap 如下所示:
当我运行 'stap -g 1.stap' 时会出现以下错误你能帮帮我吗?语义错误:位置 0 的探测点不匹配(替代方案:__nfs __scheduler __signal __tcpmib __vm _linuxmib _signal _sunrpc _syscall _vfs begin begin(number) end end(number) error error(number) generic ioblock ioblock_trace ioscheduler ioscheduler_trace ipmib irq_handler kernel kprobe kprocess linuxmib module( string) nd_syscall netdev never nfs nfsd perf process process(number) process(string) procfs procfs(string) scheduler scsi signal socket softirq stap staprun sunrpc syscall tcp tcpmib timer tty udp vfs vm workqueue): systemtap.stap 中的标识符 'oneshot': 87:7 同时解析探测点 oneshot 源:probe oneshot { ^ Pass 2:分析失败。使用另一个“--vp 01”选项重试。