全局变量踩内存定位方法
调试过程中,发现一个全局变量只在一处赋值为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进行了越界操作。