当前位置: 首页 > 面试题库 >

如何阅读,理解,分析和调试Linux内核恐慌?

花阳秋
2023-03-14
问题内容

考虑以下linux内核转储堆栈跟踪,您可以通过调用从内核源代码触发恐慌panic("debugging a linux kernel panic");

[<001360ac>] (unwind_backtrace+0x0/0xf8) from [<00147b7c>] (warn_slowpath_common+0x50/0x60)
[<00147b7c>] (warn_slowpath_common+0x50/0x60) from [<00147c40>] (warn_slowpath_null+0x1c/0x24)
[<00147c40>] (warn_slowpath_null+0x1c/0x24) from [<0014de44>] (local_bh_enable_ip+0xa0/0xac)
[<0014de44>] (local_bh_enable_ip+0xa0/0xac) from [<0019594c>] (bdi_register+0xec/0x150)
  • unwind_backtrace+0x0/0xf8什么+0x0/0xf8主张?
  • 我怎么看C的C代码unwind_backtrace+0x0/0xf8
  • 如何解释恐慌的内容?

问题答案:

这只是一个普通的回溯,这些函数以相反的顺序调用(第一个调用的函数由上一个调用,依此类推):

unwind_backtrace+0x0/0xf8
warn_slowpath_common+0x50/0x60
warn_slowpath_null+0x1c/0x24
ocal_bh_enable_ip+0xa0/0xac
bdi_register+0xec/0x150

bdi_register+0xec/0x150是符号+偏移/长度有关于更多的信息,了解内核哎呀,以及如何可以调试内核哎呀。还有关于调试内核的出色教程

注意:按照Eugene的建议,您可能要先尝试addr2line,尽管它仍然需要带有调试符号的图像,例如

addr2line -e vmlinux_with_debug_info 0019594c(+offset)



 类似资料:
  • 问题内容: 我是内核开发的新手,我想知道如何使用QEMU和gdb运行/调试Linux内核。我实际上正在阅读罗伯特·洛夫(Robert Love)的书,但不幸的是,它没有帮助读者了解如何安装适当的工具来运行或调试内核。因此,我要做的是遵循本教程http://opensourceforu.efytimes.com / 2011/02 / kernel-development-debugging-usi

  • 问题内容: Linux内核开发人员如何在提交代码后在本地测试他们的代码?他们是否使用某种单元测试,构建自动化?测试计划? 问题答案: linux内核非常重视社区测试。 通常,任何开发人员都会在提交之前测试他们自己的代码,并且经常会使用Linus的内核开发版本,或者与他们的工作相关的项目使用其他不稳定/开发树之一。这意味着他们经常同时测试自己的变更和其他人的变更。 正式的测试计划的方式往往不多,但是

  • 问题内容: 我正在从事学术项目,该项目修改了一些代码并包含了新代码。 我正在使用QEMU加载修改后的内核并进行测试。 但是,我发现某些操作系统需要完整的操作系统才能进行调试。 没有它可能吗? 或者,这是可以与Kernel 2.6一起用于系统的发行版。除了运行程序的功能(包括网络支持)以外,发行版不需要具有任何功能。 问题答案: 我认为最简单的方法是使用buildroot http://buildr

  • 分析模式下,CodeXL可以当做静态分析工具使用。AMD显卡上,分析模式可以用来编译、分析和反汇编一个OpenCL内核。分析模式可选择界面方式和命令行方式。在这之后我们就称CodeXL为“内核分析器”。内核分析器也可以通过命令行使用,在CodeXL安装目录下,有一个CodeXLAnalyzer.exe,可以直接在命令行中执行。 内核分析器是一个离线编译器,还是一个分析工具。其能将内核源码编译成任意

  • 之前章节中,我们已经了解了如何对我们的OpenCL内核源码进行优化。不过,优化的前提是程序运行结果必须是正确的。通常,调试并行程序就已经很困难了,现在需要对使用异构设备的程序进行调试,这无疑是难上加难。 OpenCL中,开发人员只需要调用相关的API,不需要知道平台底层是如何进行实现。调试器让平台底层实现以“白盒”的方式展示给开发者,开发者可以清晰的了解到,每个命令对于并行计算系统的影响。这种方式

  • 问题内容: 例如,我得到了这样的堆栈跟踪: 那么,此异常的根本原因是什么?从堆栈跟踪中,我发现类中的函数存在问题!但是,当我在此处放置一个断点时,程序永远不会在该断点处停止。 谁能给这个解释!在一般情况下,我应该如何使用该堆栈情况进行调试(从下至上或从上至下读取)! 问题答案: 通常,确切的原因在堆栈跟踪的第一行,有关该异常原因的更多信息,你需要逐步向下移动,并且根本原因通常可以在堆栈跟踪底部的某