文档首页/ LiteOS/ 维测指南/ LMS/ 使用指南
更新时间:2021-07-08 GMT+08:00
分享

使用指南

使用场景

  • 疑似系统内存问题需要定位时。
  • 开发过程中需要验证是否存在内存问题时。

使用流程

  1. 在被检测模块的Makefile文件里,增加LMS检测编译选项-fsanitize=kernel-address。
  2. 为避免编译器优化,通过menuconfig配置编译器不优化:

    LOSCFG_COMPILER_OPTIMIZE_NONE=y 【Compiler --> Optimize Option --> Optimize None】

  3. LMS只适配了bestfit内存算法,且不支持SLAB算法,需要开启如下配置项:

    LOSCFG_KERNEL_MEM_BESTFIT=y【Kernel --> Memory Management --> Dynamic Memory Management Algorithm --> bestfit】

    LOSCFG_KERNEL_MEM_SLAB_EXTENTION is not set【Kernel --> Memory Management --> Enable Mem SLAB Extension】

  4. 为输出Backtrace信息,需要开启配置项:

    LOSCFG_BACKTRACE=y【Debug --> Enable Backtrace】

  5. 开启LMS配置项:

    LOSCFG_KERNEL_LMS=y【Debug --> Enable Lite Memory Sanitizer】

  6. 重新编译,查看串口输出。如果检测到内存问题,会输出检测结果。LMS输出的检测信息类似下图所示:

    LMS检测信息包含下述几类信息:
    • 检测到的内存问题,示例图中为释放后使用Use After Free
    • 发生问题的内存地址,示例图中为0x804308cb。
    • 发生问题的内存地址对应的影子内存及该影子内存的值,示例图中影子内存地址为0x83c7b74c,该地址的值为01。
    • 发生问题的内存地址前后内存的取值。
    • 当前运行的任务,示例图中为IT_TST_INI,任务ID为4。
    • 发生问题时的backtrace回溯栈。

平台差异性

无。

相关文档