![使用 sysprof 分析现有的 Ubuntu 内核:如何使用?](https://linux22.com/image/806094/%E4%BD%BF%E7%94%A8%20sysprof%20%E5%88%86%E6%9E%90%E7%8E%B0%E6%9C%89%E7%9A%84%20Ubuntu%20%E5%86%85%E6%A0%B8%EF%BC%9A%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%EF%BC%9F.png)
有多种系统范围的调试工具(sysprof、oprofile、systemtap)需要调试符号。获取用户空间应用程序的调试符号很容易:https://wiki.ubuntu.com/DebuggingProgramCrash
ddebs 存储库也包含linux-image-$(uname -r)-dbgsym
软件包,但即使我安装了它,sysprof 仍会向我显示无用的“内核”,且不提供详细信息。我在哪里可以获取 sysprof 可以使用的调试符号?
systemtap 软件包有一个建议:linux-debug-2.6。Apt-cache 搜索无法找到任何名为 linux-debug-2.6 的东西。它在某处可用吗?或者这是一条毫无意义的死胡同?
顺便说一句,oprofile 可以使用上述 dbgsym 包中的调试符号,但不是开箱即用的——它需要
/lib/modules/$(uname -r)/build/vmlinux
,我必须告诉它使用/usr/lib/debug/boot/vmlinux-$(uname -r)-generic
。但 oprofile 缺少一个不错的 GUI,所以我更喜欢 sysprof。
那么,我怎样才能让 sysprof 向我展示内核中发生的情况?
答案1
据我所知,我错了,sysprof 实际上并没有提供任何超出“内核”的详细信息。这是 sysprof-1.0.12/process.c,第 350 行到第 355 行:
if (address == 0x1)
{
kernel.name = "in kernel";
kernel.address = 0x0001337;
return &kernel;
}