有多种系统范围的调试工具(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;
}