文档首页/ LiteOS/ 维测指南/ 调试案例/ 全局变量踩内存定位方法
更新时间:2021-07-08 GMT+08:00
分享

全局变量踩内存定位方法

调试过程中,发现一个全局变量只在一处赋值为0,但使用时打印发现变成一个非零异常值,大概率是该全局变量被踩。

如果已知一个全局变量被踩内存,可在Huawei_LiteOS/out/<platform>/.map文件中找到该全局变量所在的地址。注意该地址前面最近被使用的变量,排查是否前面变量操作不当引发踩内存,比如对该前面变量进行memcpy,memset操作时越界,溢出覆盖了当前全局变量。

这里列举一个测试的例子,在文件中定义了两全局变量,并且初始化。

UINT32 g_uwEraseMap[16] = {0};
UINT32 g_uwEraseCount = 0;

在.map文件中可以找到这些全局变量在bss段对应的位置。

若g_uwEraseMap被踩,在.map文件中找到其地址,再查找该地址前面的变量,即g_uwEraseCount。特别注意分析g_uwEraseCount变量的使用情况,观察是否存在某处,对变量g_uwEraseCount进行了越界操作。

相关文档