【问题标题】:Getting Linux kernel debug information after a kernel crash在内核崩溃后获取 Linux 内核调试信息
【发布时间】:2012-11-02 05:02:49
【问题描述】:

有没有办法在内核崩溃发生后获取内核以前的调试信息。

我正在尝试开发一个内核模块,它基本上在内核网络堆栈内的 IP 层中捕获 IP 数据包,经过一些修改后,我必须将相同的数据包发送回 NIC 进行传输。

在所有这些过程中,我都在 printk() 的帮助下编写调试信息。但是如果出现任何问题并且发生内核故障,我们必须重新启动系统。有没有办法获取我以前的调试信息,因为重新启动后调试信息不​​存在,因为我尝试通过 dmesg 命令获取它?

【问题讨论】:

    标签: c linux debugging linux-kernel


    【解决方案1】:

    实际上,/var/log/dmesg 文件包含当前启动打印消息日志。 /var/log/kern.log 文件包含您之前在Ubuntu 中的引导内核打印消息日志。在其他 Linux 风格中,它将包含在 Fedora 等的 /var/log/messages 文件中。

    【讨论】:

      【解决方案2】:

      即使在系统重新启动后,也可以在/var/log/dmesg 文件中查看内核日志消息。

      dmesg.X 会有很多文件,这些文件是以前的内核日志。 dmesg 是最新的文件。

      difference between dmesg and /var/log/kern.log

      【讨论】:

        【解决方案3】:

        您可以尝试通过键盘或串行控制台输入magic SysRq 键序列来与挂起的系统进行交互。

        【讨论】:

        • 实际上,当我运行我的模块系统时,系统只是挂起,所以我无法做任何事情,我必须强制重启。我正在尝试使用魔法 SysRq 键序列,但我没有得到结果..
        • 您可能必须在内核配置和构建期间启用 magic sysrq
        【解决方案4】:

        Linux 的最新版本支持crash dumps。成功后,这些将包括完整的内存转储,包括内核日志消息和堆栈跟踪。

        【讨论】:

          【解决方案5】:

          实际上,崩溃信息 (dmesg) 位于 /var/crash/ 位置。 在这里,我们有每个系统崩溃的文件夹。文件夹名称,例如 127.0.0.1-date-time。 vmcore-dmesg.txt 存在于文件夹中。从这些文件中,我们得到了崩溃前执行的 dmesg。

          【讨论】:

            【解决方案6】:

            GNOME Logs 是一个非常有用的软件。您可以将日志消息限制为最后一个会话,并轻松阅读崩溃前的最后一条消息。

            【讨论】:

              猜你喜欢
              • 2011-01-29
              • 1970-01-01
              • 1970-01-01
              • 2020-11-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多