windows下野指针的debug方法

项目中,出现莫名其妙的崩溃,错误为:

xxxx modified at xxxafter it was freed

断点位置在一个析构函数中,而经过检查,这个类没有问题,并不是析构已经被析构的类。

痛苦之下,搜索了一个工具:gfrag.exe  

调用:./gflags.exe -p /enable 程序名.exe /full  此处不需要指定具体路径。

这个工具其实只是设置了注册表,将:

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\程序名.exe中设置一个

GlobalFlag REG_SZ  0x02000000

PageHeapFlags REG_SZ 0x3

因此也可以自己手设。shell在运行程序时,会用完全页堆来进行程序内存分配,这样的内存,当发生野指针访问或越界访问时会产生异常。

如果不设置这个,野指针访问和越界访问不会产生异常,于是就不会当场崩溃,而是在下一个free或malloc调用中崩溃,让人无从查起。

接下来非常顺利地发现了问题:一个变量类型变了,但代码中声明的指针还是旧的,调用了不同的类的函数,于是查找了超出范围的内存。

posted @ 2017-10-15 21:38  长空小鹰  阅读(322)  评论(0编辑  收藏  举报