不少時候,內核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