用debug tools for windows中的gflags配合VC2010调试程序堆错误(如越界访问)

转载请注明出处:https://blog.csdn.net/zzdmfk/article/details/84070611

下载winstepsdk(gflags包含在其中)的ISO镜像后,win10下需将文件从ISO拷贝出来再安装,切勿直接在ISO中运行安装程序。推荐命令行方式运行gflags, 记得一定要以管理员身份运行cmd.exe。

1.在命令行中输入以下命令指定默认调试器为vsjitdebugger.exe:

cdb -iae

2.输入以下命令绑定需要调试的可执行程序,如dlg.exe(不需要绝对路径 ):

gflags -p /enable dlg.exe

3.用VC编译一个Debug版本的堆错误程序dlg.exe:

//其中出错代码
char *p= new char[10];
for(int i= 0; i <= 11; ++i)
	p[i] = i;

4.VC调试运行dlg.exe, 发现并没有触发中断,修改出错代码为:

char *p= new char[10];
for(int i= 0; i <= 16; ++i)
    p[i] = i;

再次调试运行dlg.exe,我们看到了效果,代码中断在p[i] = i;这一句。为何上一段代码不会产生中断?那是因为VC Debug 模式下的new多分配了6个字节导致。

 

调试完后记得取消gflags对可执行程序的绑定,否则此程序将只能在VC里以Debug方式运行。

gflags -p /disable dlg.exe

 

你可能感兴趣的:(Windows,VC)