【问题标题】:Memory debugger for linux kernellinux内核的内存调试器
【发布时间】:2013-11-19 15:10:25
【问题描述】:

linux内核有内存调试器吗? 在基于 android/linux arm 的硬件上的其他崩溃中,我们遇到了“空指针取消引用”内核 oops 问题。

谢谢

【问题讨论】:

    标签: linux-kernel linux-device-driver embedded-linux


    【解决方案1】:

    现代内核包含大量内置诊断工具(可在内核源配置工具的“Kernel hacking”子菜单中找到这些工具)。但是,在嵌入式目标上,还可以选择使用带有良好 jtag 调试器的 gdb,例如 Abatron BDI 系列(当然,这将允许最精确的诊断,包括对中断相关问题的诊断)。

    在没有硬件调试器的情况下,以下选项可以非常方便地检测内存泄漏(不要忘记使用“使用调试信息编译内核”和“使用帧指针编译内核”设置编译内核) :

    1. 内核内存泄漏检测器 - 用于捕获 kmalloc/kfree 错误。
    2. KGDB(带有子选项) - 这将启用内核中的内置 gdb 服务器,可以通过串行端口从 gdb 前端访问该服务器。还有一个 KGDB_KDB 选项可以手动执行相同的操作(通过省略 gdb 前端并使用人工可管理的协议)。
    3. kmemcheck - 需要最少的人工交互和最多的机器资源,但可以方便地进行初始内存相关问题分析。

    还有许多其他诊断选项,可用于更具体的问题类别。它们中的大多数都通过内核配置工具 sn-ps 以及源代码的 Documentation/ 子目录中的单独文档(+各种在线出版物)进行了合理的记录。

    【讨论】:

    • 我实际上有用于 arm 板的 JTAG 调试器。您将如何处理 JTAG 的 NULL 指针问题?
    • 另外,我检查了 kmemcheck,但它可能不适用于 ARM arch。有什么想法吗?
    • 没有“空指针问题”之类的东西。你得到的是损坏的软件或损坏的硬件(RAM 时序问题等)。后者可以通过用户空间工具或硬件调试器进行诊断(加载/卸载大块数据,注意命中可能有问题的内存库)。前者将按照通常的方式进行修复:打印输出、断点和隔离(从最小的内核配置开始并逐步添加功能)。
    猜你喜欢
    • 2011-01-09
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 2014-06-01
    • 2011-06-26
    • 1970-01-01
    相关资源
    最近更新 更多