Итак, я пытался отладить странный прерывистый сбой ядра для сервера под управлением 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
свалки сейчас? Я пропускаю шаги, которых нет в руководстве?
Итак, я понял это; кажется, что на самом деле мясо аварийной свалки не в .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
Это (в конечном итоге) дало мне полезную трассировку стека и другие подробности о том, что пошло не так.
Вам нужно использовать apport-unpack. Затем gdb и backtrace. В Интернете есть хорошие примеры использования apport-unpack.