无法使用 systemtap 访问局部变量

无法使用 systemtap 访问局部变量

我刚刚开始使用 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 和调试符号重建了内核,但仍然没有改善。

相关内容