11.4 对于崩溃转存的验尸式分析

  如果内核在您不希望的时候崩溃并转存了核心内存数据, 而您没有使用 config -g 构建内核时怎么办? 别慌! 还是有办法找回一些东西的。

  当然, 您仍然需要启用崩溃转存。 请参见前面介绍的选项来完成配置。

  进入您的内核配置目录 (/usr/src/sys/arch/conf) 并编辑配置文件。 取消下面行前的注释 (或者, 如果没有这行配置, 加上它):

makeoptions    DEBUG=-g                #Build kernel with gdb(1) debug symbols

  重新编译内核。 由于 Makefile 的时间戳发生了变化, 将会编译一些其他的目标文件, 例如 trap.o。 幸运的话, 您所增加的 -g 选项不会改变所生成的任何代码, 这样您就有了一个与发生问题的内核代码类似的、 带有调试符号的信内核了。 您至少应使用 size(1) 命令来确认新旧内核的尺寸一致。 如果不一致的话, 您只能就此放弃了。

  接下来按照前面介绍的方法来检查内核转存文件。 有些地方的调试符号可能不完整, 此时您会发现前面例子中的调用栈中的某些函数并不显示行号。 如果您需要更多的调试符号, 您应删除对应的目标文件, 并再次重新编译内核, 并重复前面的 gdb -k 会话, 直到了解了足够多的信息。

  尽管无法保证这种方法一定能管用, 但通常它还是能解决问题的。

本文档和其它文档可从这里下载:ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读文档,如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.