我刚刚开始使用 systemtap。在我的 64 位 Ubuntu 13.04 系统上,我安装了 systemtap 和依赖项 + systemtap-doc 和 elfutils,然后将 ddep 存储库添加到我的 apt/sources.list,并为我的内核 (3.8.0-29.42) 安装了 dbgsym 包。
然后我尝试运行 /usr/share/doc/systemtap-doc/examples/general 中的示例(例如 key.stp),但是我得到了
semantic error: not accessible at this address [man error::dwarf] ... identifier '$event_type' at key.stp:8:7
然后我运行了“解决损坏的 dbgsym 文件布局问题...”脚本,如wiki.ubuntu.com/内核/Systemtap
每当访问局部变量时,运行其他脚本时仍然会出现相同的错误和类似的错误。
因此,我按照同一页上的“确定探测点的局部变量”部分编写了一个小脚本,以便给我 kbd_event 中的局部变量列表。
probe begin {
printf ("probe installed")
}
probe kernel.function("kbd_event") {
printf ("%s locals [%s]\n", probefunc(), $$locals)
exit()
}
这让我
probe installed
kbd_event locals []
因此看起来 stap 没有看到任何局部变量,这就是我陷入困境的地方。
有什么想法我遗漏了什么或者下一步可以尝试什么?
谢谢!
PS:同样的过程在我的 64 位 12.04(带有 3.2.0-49.75 内核)上运行良好。
更新:我现在甚至使用 gcc 4.7 和调试符号重建了内核,但仍然没有改善。