不少时候,内核oops仍是很好处理的,由于能够看到当时的函数调用栈。objdump -DS vmlinux,配合epc(程序指针)能够定位状况发生时的代码位置。有些调试器,支持断点地址设置,能够直接显示问题发生时的代码位置。linux
然而,当系统陷入某种死锁状态。又好比应用程序进行的系统调用不能退出等等。这种状况下,显示当前全部线程的当前函数调用栈就有很大的帮助做用了。ide
咱们能够经过外部触发事件,好比按键,终端输入。或者在程序代码中设定定时器。在事件处理程序中,显示当前全部线程或者关心的线程的函数调用栈。函数
if(task == current)
{
dump_stack();
}else
{
regs.regs[29] = task->thread.reg29;
regs.regs[31] = task->thread.reg31;
regs.cp0_epc = 0;
show_backtrace(task, ®s);
}oop