一个bug,程序大多数时候都好的,但每天会遇到几次crash。
先是锁定发crash的调用,对调用里可能出问题的地方,加log。
根据log锁定发生crash的函数,加log。
找到crash直接原因,函数里使用的静态变量,在crash时有异常。
在该静态变量前后加了同类型类似名称的静态变量,crash时它们也有异常。
判断应该是静态变量内存被破坏了,应该是别的静态变量访问越界导致。
在调试中发现,调用另一个函数后,再调用上面函数,crash必现。
后面就好办了,在另一个函数里,有个buffer是个char数组,是函数内的静态变量,使用时没有检查越界,如果越界,就破坏了其他变量了。
重写该函数,问题解决。
这个bug解决中还遇到一个问题,在windows上调试没有问题,在Linux上运行就有问题,原来是处理的字符串,在windows上用的GB编码,在Linux上用utf-8编码,Linux上字符串更长,所以越界发生了。
一个偶现bug排除
最新推荐文章于 2024-09-14 11:44:58 发布