因此,我一直在尝试调试运行 Ubuntu-Server 16.04 的服务器上奇怪的间歇性内核崩溃,这个问题困扰了我很长时间,因此我安装并设置了linux-crashdump
按照以下说明进行安装和设置Ubuntu wiki 崩溃转储秘诀。
等待问题再次出现之后,它linux-crashdump
已经完成了它的工作并生成了崩溃转储,但现在我不知道如何使用它!
Ubuntu 指南提供了两种查看它们的方法,要么使用crash
,要么使用apport-retrace
,但这两种方法都不能按描述的方式工作。
apport-retrace
仅返回:
ERROR: report file does not contain the required fields
同时,对于crash
,我已经按照建议下载了带有调试信息的适当图像apt-get install linux-image-$(uname -r)-dbgsym
,然后运行以下命令:
crash /usr/lib/debug/boot/vmlinux-4.4.0-93-generic /var/crash/linux-image-4.4.0-93-generic-201709131146.crash
然而这会导致以下错误:
crash: linux-image-4.4.0-93-generic-201709131146.crash: not a supported file format
现在查看linux-crashdump
转储的正确方法是什么?我是否遗漏了指南中未包含的步骤?
答案1
所以我明白了;似乎崩溃转储的实际内容.crash
根本不在文件中,而是在文件夹内。
因此,我的文件夹的相关内容/var/crash
如下所示:
/var/crash/
201709131146/
dmesg.201709131146
dump.201709131146
linux-image-4.4.0-93-generic-201709131146.crash
所以我需要运行的是:
crash /usr/lib/debug/boot/vmlinux-4.4.0-93-generic /var/crash/201709131146/dump.201709131146
这(最终)给了我一个有用的堆栈跟踪和有关出现问题的其他详细信息。
答案2
您需要使用 apport-unpack。然后使用 gdb 和 backtrace。网上有很多关于如何使用 apport-unpack 的很好的例子。