这些年曾经遇到过一些比较棘手的linux 异常问题,遗憾的是很多时候没有及时更新总结,导致我自己再次遇到的时候也要靠网络搜索相关文章去回忆解决办法,本文会持续更新,逐步完善linux 崩溃异常解决问题办法。
linux 崩溃异常无非是死锁,空指针,访问非法区域等问题,通常一般的方法,用静态的分析方式可以解决问题,实在比较复杂的情况只能用KGDB的等方式来解决。
为了方便调试和测试代码,内核提供了许多与内核调试相关的配置选项。这些选项大部分都在内核配置编辑器的内核开发(kernel hacking)菜单项中。在内核配置目录树菜单的其他地方也还有一些可配置的调试选项,下面将对他们作一定的介绍。
Page alloc debugging :CONFIG_DEBUG_PAGEALLOC:
不使用该选项时,释放的内存页将从内核地址空间中移出。使用该选项后,内核推迟移出内存页的过程,因此能够发现内存泄漏的错误。
Debug memory allocations :CONFIG_DEBUG_SLAB:
该打开该选项时,在内核执行内存分配之前将执行多种类型检查,通过这些类型检查可以发现诸如内核过量分配或者未初始化等错误。内核将会在每次分配内存前后 时设置一些警戒值,如果这些值发生了变化那么内核就会知道内存已经被操作过并给出明确的提示,从而使各种隐晦的错误变得容易被跟踪。
Spinlock debugging :CONFIG_DEBUG_SPINLOCK:
打开此选项时,内核将能够发现spinlock未初始化及各种其他的错误,能用于排除一些死锁引起的错误。
Sleep-inside-spinlock checkingÿ