死鎖後,導出線程函數調用棧

不少時候,內核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, &regs);
        }oop

相關文章
相關標籤/搜索