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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章