一次很偶然的机会,发现在调用某个函数的时候,发生core dump的情况。用gdb的bt命令没看出啥来,用x/20x value查看,发现在调用malloc函数时,x/20x value的内存发生改变了,很显然,这个不太可能,实在百思不得其解。只好在每个关键地方都调用malloc来逼近问题最接近的地方。最后,发现有个地方使用malloc(sizeof(var))来分配内存,却使用memset(var , 0 , sizeof(var_t))来清空内存,导致内存溢出。
这里用到了几个技巧值得记录下:
1、gdb 来确定core dump的地方
2、由于原因不在发生core dump的地方,所有用内存检查的方式来确定发生内存变化的地方。
3、确定malloc导致内存发生变化,使用malloc尽早的引起core dump,来逼近最根本的地方。
4、通过大范围到小范围多层次来逼近问题的根本原因。