一种Windows下懒式探测野指针的方法

一种Windows下探测野指针的方法

在一个大型项目中遇到了crt报告HEAP: Free Heap block XXXXXXXX modified at YYYYYYYY after it was freed。
原因很明确:野指针,但是因为项目里大量使用了智能指针,因此要定位问题就略头痛了。

最初是准备在程序运行时建立内存断点以监视所有对YYYYYYYY的写操作。但是刚开始运行的时候YYYYYYYY是不能访问的。
于是准备重载new 操作以在该内存块能访问的时候下断点,然而对于一个要反复分配内存的程序,手工监视某个页是否可以访问实在太麻烦了,根本没有可操作性。于是我在new里面加了如下代码:

{
 static BOOL bMark=FALSE;
 __try
 {
  if(!bMark)
  {
   int i=*((PUINT8)(/*出错地址*/);
   _ASSERT(FALSE);
  }
  bMark=TRUE;
 }
 __except(1)
 {
 }
}

每次new操作之后都试图访问YYYYYYYY,如果不能访问,则进入异常处理部分直接忽略_ASSERT()及后面的代码,继续运行。如果可以访问,那么_ASSERT()会触发一个断点。此时可以手动在YYYYYYYY处设置内存断点,同时自动将bMark设置为TRUE,后面再执行到此的时候就不会停下来。如此只需要一次手动操作即可达成设置断点的效果。

实在是懒出了风格之举。 :-D

发布了17 篇原创文章 · 获赞 3 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Areslee/article/details/76752818