C语言调试内存访问出错而引起的程序崩溃问题

在写代码的时候,经常碰到由于内存访问出错而导致程序崩溃。当代码量比较多的时候,根本不知道程序错在哪里,只能不断猜测代码出错的地方,将其注释掉还会不会出现程序崩溃,这种方法虽然最后也能找到问题所在,但是会耗费大量时间。

linux下调试通常会生成core dump文件,再结合gdb调试来定位问题,这种方法我没有研究过,我一般在win下的msys2环境下开发,无意中发现了一种非常有效的调试方法,我觉得很有必要分享一下。

我安装的msys2版本是msys2-i686-20180531,在msys2下用pacman安装的gcc和gdb版本分别是msys/gcc 7.3.0-1和msys/gdb 7.11.1-1,虽然名字中看不出来,但这个版本其实就是cygwin gcc而不是mingw gcc。

之前程序运行出错时,会产生一个xxx.exe.stackdump的文件,这个肯定是和内存出错有关,本想研究这个文件,但是一直没头绪。后来借助eclipse调试,程序跑飞后会停下来,我本以为是随便停在代码的某个地方,其实不是的,就是停在访问的非法内存变量上。

比如我定义了一个没有初始化的指针:
u8 *aLiveTypeNum;
然后使用该变量后就会导致内存访问越界而使程序跑飞,在eclipse里调试就会像断点一样停在第一次使用aLiveTypeNum的地方
在这里插入图片描述

有了这个功能以后再也不用费心思调试内存出错引起的程序崩溃问题了。

猜你喜欢

转载自blog.csdn.net/pfysw/article/details/82949228