死锁后,导出线程函数调用栈

不少时候,内核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

相关文章
相关标签/搜索