更新时间:2021-07-08 GMT+08:00
memcheck
命令功能
检查动态申请的内存块是否完整,是否存在内存越界造成的节点损坏。
命令格式
memcheck
使用指南
- 打开内存完整性检查开关。
- 目前只有bestfit内存管理算法支持该命令,需要使能LOSCFG_KERNEL_MEM_BESTFIT:
Kernel ---> Memory Management ---> Dynamic Memory Management Algorithm ---> bestfit
- 该命令依赖于LOSCFG_BASE_MEM_NODE_INTEGRITY_CHECK,使用时需要在菜单项中开启"Enable integrity check or not"。
Debug ---> Enable a Debug Version ---> Enable MEM Debug ---> Enable integrity check or not
- 目前只有bestfit内存管理算法支持该命令,需要使能LOSCFG_KERNEL_MEM_BESTFIT:
- 当内存池所有节点完整时,输出"memcheck over, all passed!"。
- 当内存池存在节点不完整时,输出被损坏节点的内存块信息。
使用实例
举例:
输入memcheck。
输出说明
- 没有内存越界时,执行memcheck输出内容如下:
Huawei LiteOS # memcheck system memcheck over, all passed!
- 发生内存越界时,执行memcheck输出内容如下:
Huawei LiteOS # memcheck [ERR][OsMemIntegrityCheck], 1145, memory check error! freeNodeInfo.pstPrev:(nil) is out of legal mem range[0x80353540, 0x84000000] broken node head: (nil) (nil) (nil) 0x0, pre node head: 0x7fc6a31b 0x8 0x80395ccc 0x80000110 --------------------------------------------- dump mem tmpNode:0x80395df4 ~ 0x80395e34 0x80395df4 :00000000 00000000 00000000 00000000 0x80395e04 :cacacaca cacacaca cacacaca cacacaca 0x80395e14 :cacacaca cacacaca cacacaca cacacaca 0x80395e24 :cacacaca cacacaca cacacaca cacacaca --------------------------------------------- dump mem :0x80395db4 ~ tmpNode:0x80395df4 0x80395db4 :00000000 00000000 00000000 00000000 0x80395dc4 :00000000 00000000 00000000 00000000 0x80395dd4 :00000000 00000000 00000000 00000000 0x80395de4 :00000000 00000000 00000000 00000000 --------------------------------------------- cur node: 0x80395df4 pre node: 0x80395ce4 pre node was allocated by task:SerialShellTask cpu0 is in exc. cpu1 is running. excType:software interrupt taskName = SerialShellTask taskId = 8 task stackSize = 12288 system mem addr = 0x80353540 excBuffAddr pc = 0x80210b78 excBuffAddr lr = 0x80210b7c excBuffAddr sp = 0x803b2d50 excBuffAddr fp = 0x80280368 R0 = 0x59 R1 = 0x600101d3 R2 = 0x0 R3 = 0x8027a300 R4 = 0x1 R5 = 0xa0010113 R6 = 0x80395e04 R7 = 0x80317254 R8 = 0x803b2de4 R9 = 0x4 R10 = 0x803afca4 R11 = 0x80280368 R12 = 0x1 CPSR = 0x600101d3
以上各关键输出项含义如下:
- “mem check error”,表示检测到了内存节点被破坏。
- “cur node:”,表示该节点内存被踩,并打印内存地址。
- “pre node:”,表示被踩节点前面的节点,并打印节点地址。
- “pre node was allocated by task:SerialShellTask”表示在SerialShellTask任务中发生了踩内存。
- “taskName”和“taskId”,分别表示发生异常的任务名和任务ID。
父主题: 系统命令参考