博客日历
2025年01月 | ||||||
一 | 二 | 三 | 四 | 五 | 六 | 七 |
30 | 31 | 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 | 1 | 2 |
存档
2024年03月 04月 05月 2021年
01月 02月 11月 12月 2020年
02月 03月 04月 05月 06月 07月
09月 2018年
09月 2017年
01月 02月 07月 2016年
01月 04月 07月 08月 11月 12月
2015年
01月 02月 03月 05月 09月 10月
11月 2014年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2013年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2012年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2011年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2010年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2009年
03月 04月 05月 06月 07月 08月
09月 10月 11月 12月
用GFlags解决Visual C++无法定位的内存非法访问问题
1.案例
调试运行,程序退出时崩溃在ntdll中的一个函数中,output窗口中输出:
HEAP: Free Heap block xxxxxx modified at xxxxxx after it was freed
此时,无法快速找出程序哪里出现了内存非法访问。
2.解决方法
a.安装Debugging Tools for Windows(也就是WinDbg),安装后将安装目录添加到Path环境变量中
b.执行:gflags -p /enable ***.exe /full
"***.exe"为需要调试的程序名称,不需要完整路径。
该命令行会在注册表里设置一些调试参数,使内存在使用的时候加入了保护机制,一旦内存写
越界,或者发生野指针的问题,都会导致一个中断。由此,就可以确定问题到底出在哪里了。|
c.调试运行自己的程序,此时Visual C++会直接定位在有问题的代码处。
d.删除注册表中的调试设置:gflags -p /disable ***.exe
上一篇: MySQL C API的简单应用
下一篇: DoDataExchange(CDataExchange* pDX)不执行,没有执行
分类:Win32/C++ 查看次数:10187 发布时间:2009/8/6 22:24:09