问题标签 [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.
android - Android 上的 SystemTap
当我在 android 上执行命令“staprun”时,我遇到了以下问题:
模块 msyscall_all.ko 与我的 android 运行的内核交叉编译。
首先,我确信 msyscall_all.ko 是完全正确的,因为我使用命令“insomd”和“lsmod”来确保它是正确的。我这样做如下:
其次,我按照以下说明进行操作:http: //omappedia.org/wiki/Systemtap#Systemtap_1.0_code_update_for_OMAP_ARM_platforms
而且我的systemtap-1.0-omap 交叉编译成功!!但是,在我使用“adb push”将 systemtap-1.0-omap 推送到我的 android 设备并运行它之后,我收到以下错误:
/data/systemtap-1.0-omap/bin/staprun:1:语法错误:“(”意外
当在 ubuntu 上运行“staprun”时,它给了我如何运行“staprun”的建议,当它在 android 设备上运行时,它出错了:
我已经尽力了,但我无法解决它!
ubuntu - systemtap 无法在 Ubuntu 3.2 上找到跟踪事件
systemtap 无法找到跟踪事件,即使它们都在目录中可用:/sys/kernel/debug/tracing/events。运行“perf record sched”会发现所有 sched 跟踪事件没有任何问题。
系统正在运行:Linux(无)3.2.0-48-virtual #74-Ubuntu SMP Thu Jun 6 20:02:55 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
stap -l 'kernel.trace("*")
未找到活动
systemtap 可以毫无问题地找到内核函数。
stap -l 'kernel.function("*")'
.. kernel.function("AUDIT_MODE@/build/buildd/linux-3.2.0/security/apparmor/include/policy.h:311") kernel.function("BLEND_OP@/build/buildd/linux-3.2.0 /crypto/sha256_generic.c:48") kernel.function("BLOCK_NEXT@/build/buildd/linux-3.2.0/drivers/staging/zram/xvmalloc.c:82") ....
我在 openSUSE 上看到了一个错误报告:
错误 800335 - devel:tools/systemtap: 未声明对 libebl1 的依赖
但 libebl1 是已安装的 Elfutils 软件包的一部分。导致 systemtap 找不到跟踪事件可能会丢失什么。
谢谢,阿米尔。
systemtap - 在 systemtap 中,如何在用户空间进程中捕获函数的返回?
以下 systemtap 脚本无法编译:
它说:
语义错误:解析探测点时:proxy.stp:6:7 处的标识符“进程”源:探测进程(“/home/martin/experiments/systemtap/a.out”).function(“doSomething”).return ^
语义错误:进程返回探针不可用 [man error::inode-uprobes] Pass 2:分析失败。[man error::pass2] 提示:/usr/share/doc/systemtap/README.Debian 应该可以帮助您入门。
我想在函数退出时捕获,而不是进程。如果我删除.return
它,它会编译并运行良好。如何捕获函数退出?
我在 Ubuntu 13.04、Linux 3.8.0-29-generic、系统分流器 2.1/0.153 上。
systemtap - Systemtap,打印目标的本地变量和省略号
我在内核 3.11.0-generic 的 ubuntu 13.10 上运行 systemtap 2.2.1。
以下脚本
打印以下结果
root@u1310:~# stap net.stp
开始...
{.next=0x0, .prev=0x0, .tstamp={.tv64=0}, .sk=0x0, .dev=0xffff880134c94000, .cb="", ._skb_refdst=0, .sp=0x0, .len= 46, .data_len=0, .mac_len=14, .hdr_len=0, ={.csum=0, ={.csum_start=0, .csum_offset=0}}, .priority=0, .local_df=0, .cloned =0, .ip_summed=1, .nohdr=0, .nfctinfo=0, .pkt_type=0, .fclone=0, .ipvs_property=0, .peeked=0, .nf_trace=0, .protocol=8, .destructor =0x0, .nfct=0x0, .nfct_reasm=0x0, .nf_bridge=0x0, .skb_iif=0, ... } <-- 如何打印所有字段而不仅仅是省略号?
根@u1310:~#
如何打印结构中的所有字段而不是“省略号”...
任何帮助、指针和/或参考将不胜感激,我的 google-fu 只带我到目前为止......
c++ - 可以通过 systemtap 探针停止进程以便可以附加 gdb 吗?
我们有一个多进程应用程序,其中调试特定的子进程被证明是困难的。由于进程之间的消息传递超时,我们没有时间将 gdb 附加到目标子进程,所以我想知道是否可以通过 systemtap 探针停止进程?
我认为应该需要一个简单的探测,例如:
不幸的是,上面没有编译......有什么想法吗?
我不是 systemtap 专家,所以这可能不是最好的解决方案,但对于任何有兴趣的人来说,这是我的粗略解决方案:
linux-kernel - kprobes中未定义异常处理程序(__und_svc)的作用是什么?
我试图将 kprobe 转换为可加载的内核模块。
我能够运行samples/kprobes/
内核树文件夹中可用的示例。
如果我们在 kernel( CONFIG_KPROBES
) 中配置 kprobes,那么svc_entry
宏将在__und_svc()
处理程序中扩展为 64 字节。
参考: http://lxr.free-electrons.com/source/arch/arm/kernel/entry-armv.S?a= arm#L245
我的目标是不涉及内核方面,将 kprobe 作为内核模块。
所以内核在不启用 CONFIG_KPROBES 的情况下编译。所以 svc_entry 宏将在 __und_svc()中扩展为 0
我想摆脱这些疑虑。
如果 kprobe 处理了未定义的指令异常(只创建了 bcos kprobe),那么为什么
__und_svc()
会被调用。__und_svc()
处理程序对于 kprobes的作用是什么?如果 64 字节内存是强制性的,那么如何在不编译内核的情况下进行分配。即如何动态地做到这一点。??
请分享你的知识。
function - 官方systemtap教程第2.3节“练习”的第三个练习
问题描述:
清单:socket_trace.stp
通过从第一个探测器中删除 .call 修饰符来更改列表。注意函数入口和函数返回现在不再匹配了。这是因为现在第一个探针将匹配普通函数入口和内联函数。尝试将 .call 修饰符放回去并为探针添加另一个探针 kernel.function("*@net/socket.c").return 您可以在探针处理程序中使用什么 printf 语句来很好地显示内联函数条目.call 和 .return 线程缩进输出之间?
我不知道如何表明函数返回探针处理程序中发生了内联函数调用(如果有的话)?有人可以帮忙吗?提前致谢。
gcc - 如何在 systemtap 中检查用户空间函数的变量?
在 systemtap 中检查用户空间应用程序的局部变量时遇到问题。
我这样写一个test.c:
并编译它-g
Systemtap 可以看到func()
:的变量p
和val
所以我使用这个 stp 来观察变量:
但是测试程序执行时结果中的局部变量不正确,它显示:
我正在使用 fedora19:
有人可以遇到这个问题或给我一个解决方案吗?
rpm - systemtap 为其他计算机生成仪器
根据https://sourceware.org/systemtap/SystemTap_Beginners_Guide/cross-compiling.html#preppingxcompile,我们可以按照以下步骤为其他计算生成工具。
*1。在每个目标系统上安装 systemtap-runtime RPM。
通过在每个目标系统上运行 uname -r 来确定在每个目标系统上运行的内核。
在主机系统上安装 SystemTap。您将为主机系统上的目标系统构建检测模块。有关如何安装 SystemTap 的说明,请参阅第 2.1.1 节,“安装 SystemTap”。
使用之前确定的目标内核版本,按照第 2.1.2 节“安装所需的内核信息 RPM”中描述的方法在主机系统上安装目标内核和相关 RPM。如果多个目标系统使用不同的目标内核,您将需要对目标系统上使用的每个不同内核重复此步骤。*
**我的问题是
- 如何在一个主机系统中安装多个版本的 kernel-devel?
- 我尝试卸载kernel-devel,kernel-debuginfo,kernel-debuginfo-common,并为目标主机安装一组新的,(目标主机和本主机版本不同),然后我发现运行“stap-- remote xxx" 也需要相同的内核版本。我怎样才能让生活变得轻松?我应该重新安装内核以匹配目标主机的内核版本吗?**
$ sudo rpm -ivh 下载/kernel-devel-2.6.32-220.el6.x86_64.rpm
[sudo] zhifan 的密码:
警告:下载/kernel-devel-2.6.32-220.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY Preparing... ############## ############################# [100%]
sockets - Systemtap %M printf format only returns one character
I'm trying to print the data received on a socket - the contents of ubuf on the return of sys_recv. I cant get the %M format specifier to work properly. Can someone please explain how to use it properly. Thanks
using this probe: [laris@kakitis stap]$ cat socket-recv.stp
From my reading of the man page the format %10M should return 10 bytes from the location pointed to by $ubuf:void but I only get 1. Adjusting the parameter 10 shifts the one character output rather than showing more or less memory
Changing 10 to 2 gives this
System particulars are: