使用指南
使用场景
- 疑似系统内存问题需要定位时。
- 开发过程中需要验证是否存在内存问题时。
使用流程
- 在被检测模块的Makefile文件里,增加LMS检测编译选项-fsanitize=kernel-address。
- 为避免编译器优化,通过menuconfig配置编译器不优化:
LOSCFG_COMPILER_OPTIMIZE_NONE=y 【Compiler --> Optimize Option --> Optimize None】
- 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】
- 为输出Backtrace信息,需要开启配置项:
- 开启LMS配置项:
- 重新编译,查看串口输出。如果检测到内存问题,会输出检测结果。LMS输出的检测信息类似下图所示:
LMS检测信息包含下述几类信息:
- 检测到的内存问题,示例图中为释放后使用Use After Free
- 发生问题的内存地址,示例图中为0x804308cb。
- 发生问题的内存地址对应的影子内存及该影子内存的值,示例图中影子内存地址为0x83c7b74c,该地址的值为01。
- 发生问题的内存地址前后内存的取值。
- 当前运行的任务,示例图中为IT_TST_INI,任务ID为4。
- 发生问题时的backtrace回溯栈。
平台差异性
无。