Visual Studio 2008 定位内存泄露简单方法

  刚刚解决了一个内存泄露的问题,是个疑难问题。在网上找了各种方法都没有效果。最终找到如下方法:
  首先确定自己的程序使用的是哪个C运行库:
  方法是程序Propertise -> C/C++ -> Code Generation -> Runtime Library选项,若为Multi-threaded Debug(/MTd),则为静态链接,若为Multi-threaded Debug DLL(/MDd),则为动态链接。
  然后按F11启动程序,程序会停在入口点。此时调出Watch窗口:
  如果是静态链接 在name项中输入_crtBreakAlloc,在value项中输入你要定位的内存分配编号
  如果是动态链接 在name项中输入{,,msvcr90d.dll}_crtBreakAlloc,在value项中输入内存分配号
  注意msvcr90d.dll是vc2008环境使用的运行库dll,若你用的是其他版本vc,请换成对应版本的dll。
  现在按F5运行,程序就会自动定位到你要调试的内存分配语句,这时候看call stack的信息会很有帮助。
 
  该方法适用于程序比较大,内存泄露比较多的情形。这个办法使用起来非常灵活,只要你确定内存分配号是不变的,就可以方便地为程序设置断点了,省去了更新代码和编译的麻烦。这个方法几乎是当前进行内存泄漏调试的最有效方法,如果你发现内存泄漏的分配号是变化的,可以想办法去掉一些没有问题的内存申请(多半是界面和多线程涉及到的申请),尽量使有问题的分配固定,就可以用这个方法排错了。
 
   参考: http://blog.sina.com.cn/s/blog_48f93b530100hnls.html

猜你喜欢

转载自blog.csdn.net/lightlater/article/details/11880927
今日推荐