Я учусь отлаживать ядро Linux, используя kdump / kexec (vmcore).
Я могу получить coredump ядра Linux, запустив sysrq.
root @ testVM: ~ # echo c> / proc / sysrq-trigger
[57.145290] sysrq: SysRq: вызвать сбой
[57.148126] ==================================================== ==
[57.151953] BUG: KASAN: null-ptr-deref в sysrq_handle_crash + 0x69 / 0xb0
[57.155591] Запись размера 1 по адресу 0000000000000000 по заданию bash / 3887
[57.160443] CPU: 1 PID: 3887 Comm: bash Kdump: загружен Не испорчен 4.18.0-rc3 # 1
Как показано в журнале выше, задача на CPU1 вызвала сбой.
Я могу использовать GDB с файлом vmcore. Я получил следующую трассировку стека с помощью команды bt
.
(gdb) bt
# 0 native_safe_halt () в /home/daeryong/workspace/linux/arch/x86/include/asm/irqflags.h:55
# 1 0xffffffff84848eac в arch_safe_halt () в /home/daeryong/workspace/linux/arch/x86/include/asm/paravirt.h:94
# 2 default_idle () в /home/daeryong/workspace/linux/arch/x86/kernel/process.c:500
...
Кажется, что трассировка стека показывает пустую задачу.
Таким образом, я предполагаю, что описанная выше трассировка стека предназначена для задачи на CPU0, так как в официальном документе написано, Stack trace for the task on processor 0, register display, and memory display work fine.
Прав ли я до сих пор?
А как посмотреть трассировку стека, записывается для задачи на CPU1?