1. 程式人生 > >Windows 記憶體洩漏檢測工具——LeakDiag 詳解

Windows 記憶體洩漏檢測工具——LeakDiag 詳解

對於記憶體洩漏的檢查,本質上在於定位記憶體洩漏。這種定位包含兩層含義:

一是定位模組,即哪個模組出了問題。

二是定位程式碼,即找到造成記憶體洩漏的程式碼。

對此,在分工合作完成一個系統的背景下,我們檢查記憶體洩漏的工作流程就應該是:第一,定位模組;第二,如果是我們的模組出現問題,就要定位程式碼。

對於記憶體洩漏的檢查工作,感覺更像一個偵探工作。只有找到足夠的線索,才能找到真正的原因。要想成為一個優秀偵探,自身的偵察能力最重要。而優秀的偵探,一般都會有一些好的偵探工具。

那麼,應該怎樣來評價記憶體洩漏的檢查工具的優劣?在這裡,我們不妨展開想象:

1)它可以自由選擇監測的時間點;

2)它可以attach 任何一個執行的程序來追蹤記憶體洩漏;

3)我不需要在我的程式中加任何程式碼;

4)沒有原始碼,我照樣能發現記憶體洩漏的地方;

5)我能得到每次分配記憶體,而未釋放的堆疊情況。

6)不管是釋出版,還是除錯版的程式,都能做到上面幾點。

在此,我推薦使用MicroSoft公司自己開發的一個工具——LeakDiag

LeakDiag是一個監測記憶體洩漏的工具,可以用來精確地找到記憶體洩露一直到程式碼行。它使用微軟的Detours 技術,攔截指定記憶體分配的呼叫並跟蹤各種呼叫棧,並報告已分配但尚未釋放的記憶體,這一資訊允許讓我們在排除一個記憶體洩露問題時,能精確檢視哪些元件進行了該分配。使用正確的除錯符號,我們甚至可以看見請求分配的程式碼行。比較了市面上各種記憶體洩漏檢測工具,我覺得這個工具較好的做到了上面的

6 點。

LeakDiag支援5種不同的分配:

1)虛擬分配。 這種分配可追蹤用VirtualAlloc/ VirtualAllocEx 等關於虛擬記憶體分配的記憶體。此時,選擇LeakDiag [Memory allocators] 選項的“Virtual Memory Allocator”來檢測。

2)堆分配。這種分配可追蹤NTDLL.DLL中如下函式分配的記憶體。

·RtlCreateHeap,

·RtlDestroyHeap,

·RtlAllocateHeap,

·RtlFreeHeap,

·RtlReAllocateHeap,

·LocalReAlloc,

·LocalFree,

·

LocalAlloc,

·LocalReAlloc,

·GlobalAlloc,

·GlobalReAlloc and

·GlobalFree

此時,選擇LeakDiag [Memory allocators] 選項的“Windows Heap Allocator”來檢測。

3)執行緒區域性儲存(Thread Local StorageTLS指允許一個程序的多個執行緒儲存每個執行緒所獨有的資料的一種Win32 機制)分配。這種分配可追蹤MSDART32.DLL中如下函式分配的記憶體。

·MPHeapAlloc,

·MPHeapFree and

·MPHeapReAlloc

此時,選擇LeakDiag [Memory allocators] 選項的“MPHeap Allocator”來檢測。

4)COM分配(外部和內部)。這種分配可追蹤OLE32.DLLOLEAUT32.DLL 中如下函式分配的記憶體。

·CoGetMalloc,

·CoTaskMemAlloc,

·CoTaskMemFree,

·CoTaskMemRealloc,

·CRetailMalloc_Alloc,

·CRetailMalloc_Free,

·CRetailMalloc_Realloc,

·SysAllocStringLen,

·SysAllocStringByteLen,

·SysAllocString,

·SysFreeString,

·SysReAllocString and

·SysReAllocStringLen

此時,選擇LeakDiag [Memory allocators] 選項的“COM Allocator”或“COM Internal Allocator”來檢測。

5)C執行時分配。這種分配可追蹤MSVCRT.DLL中如下函式分配的記憶體。

·malloc,

·calloc,

·realloc,

·free,

·new,

·new[],

·delete and

·delete[]

此時,選擇LeakDiag [Memory allocators] 選項的“C Runtime Allocator”來檢測。

相關推薦

Windows 記憶體洩漏檢測工具——LeakDiag

對於記憶體洩漏的檢查,本質上在於定位記憶體洩漏。這種定位包含兩層含義: 一是定位模組,即哪個模組出了問題。 二是定位程式碼,即找到造成記憶體洩漏的程式碼。 對此,在分工合作完成一個系統的背景下,我們檢查記憶體洩漏的工作流程就應該是:第一,定位模組;第二,如果是我們的模組出現

window使用記憶體洩漏檢測工具Leakdiag記錄

Leakdiag安裝 windows下記憶體洩漏查詢工具Leakdiag使用起來還是蠻方便的。 Leakdiag下載之後按照預設設定安裝,否則好像是會出問題的。 預設安裝是直接裝在C盤下。 那它是如何來檢測記憶體洩漏的呢? 下圖所示是Leakdiag目

Windows 7 下 vs2010記憶體洩漏檢測工具VLD的使用

1 環境和軟體 Windows7 32位系統    Visual Studio 2012 旗艦版    vld-2.2.3-setup.exe  大小1.04M 2 步驟   1)下載安裝 下載好 vld-2.2.3-setup.exe(大小1.04

c++記憶體洩漏檢測工具(上)

原文連結: http://blog.csdn.net/beanjoy/article/details/7578372   1/  VC自帶的CRT:_CrtCheckMemory   偵錯程式和 CRT 除錯堆函式 用法 /********

C 記憶體洩漏檢測工具

所有使用動態記憶體分配(dynamic memory allocation)的程式都有機會遇上記憶體洩露(memory leakage)問題,在Linux裡有三種常用工具來檢測記憶體洩露的情況,包括: mtrace dmalloc memwatch 1. mtrace

Unix下C程式記憶體洩漏檢測工具Valgrind安裝與使用

                Valgrind是一款用於記憶體除錯、記憶體洩漏檢測以及效能分析的軟體開發工具。 Valgrind的最初作者是Julian Seward,他於2006年由於在開發Valgrind上的工作獲得了第二屆Google-O'Reilly開原始碼獎。 Valgrind遵守GNU通用公共許

簡單強大的Android記憶體洩漏檢測工具 LeakCanary

    幾乎每個程式設計師在開發的過程中都會遇到記憶體洩漏,那麼我們如何檢測到app是否哪裡出現記憶體洩漏呢?square公司推出了一款簡單粗暴的檢測記憶體洩漏的工具-- LeakCanary 什麼是記憶體洩漏?        記憶體洩漏是指由於疏忽或者錯誤造成程式未能釋放已經不再使用的記憶體,記憶體洩漏不

c/c++記憶體洩漏檢測工具

1、  可以得到記憶體洩漏點的呼叫堆疊,如果可以的話,還可以得到其所在檔案及行號; 2、  可以得到洩露記憶體的完整資料; 3、  可以設定記憶體洩露報告的級別; 4、  它是一個已經打包的lib,使用時無須編譯它的原始碼。而對於使用者自己的程式碼,也只需要做很小的改動; 5、

Linux C/C++ 記憶體洩漏檢測工具Valgrind

下面是一段有問題的C程式程式碼test.c #i nclude <stdlib.h> void f(void) { int* x = malloc(10 * sizeof(int)); x[10] = 0; //問題1: 陣列下標越界 } //問

C/C++的記憶體洩漏檢測工具Valgrind memcheck的使用經歷

 Linux下的Valgrind真是利器啊(不知道Valgrind的請自覺檢視參考文獻(1)(2)),幫我找出了不少C++中的記憶體管理錯誤,前一陣子還在糾結為什麼VS 2013下執行良好的程式到了Linux下用g++編譯執行卻崩潰了,給出一堆彙編程式碼也看不懂。久久不

C++記憶體洩漏檢測工具-Valgrind使用簡介

一  valgrind是什麼? Valgrind是一套Linux下,開放原始碼(GPL V2)的模擬除錯工具的集合。Valgrind由核心(core)以及基於核心的其他除錯工具組成。核心類似於一個框架(framework),它模擬了一個CPU環境,並提供服務給其他工具;

嵌入式 不同平臺或者語言記憶體洩漏檢測工具

1.     ccmalloc-Linux和Solaris下對C和C++程式的簡單的使用記憶體洩漏和malloc除錯庫。 2.     Dmalloc-Debug Malloc Library. 3.     Electric Fence-Linux分發版中由Br

IOS-記憶體洩漏檢測工具Instruments中的Leaks

Instruments 是一個很靈活的、強大的工具;是效能分析、動態跟蹤 和分析OS X 以及iOS程式碼的測試工具;用它可以極為方便收集關於一個或多個系統程序的效能和行為的資料,並能及時隨著時間跟蹤而產生的資料,並檢查所收集的資料,還可以廣泛收集不同型別的資料;也可以追蹤程式執行的過程,這樣instrume

記憶體洩漏檢測分析工具

monkey 工具測試應用 可以使用monkey自動化測試工具快速不斷的操作應用。終端指令: // 300 毫秒一個事件,2000個事件,跑10分鐘 adb shell monkey -p com.android.deskclock -v --throttle 300 --ign

【linux】Valgrind工具(七):Memcheck(記憶體錯誤檢測器)

一、概述 Memcheck是一個記憶體錯誤檢測器。它可以檢測C和C ++程式中常見的以下問題: 1、非法記憶體:如越界、釋放後繼續訪問; 2、使用未初始化的值; 3、釋放記憶體錯誤:如double-free(同一記憶體上執行了兩次free)、或者 malloc、new、new[] 與

linux記憶體除錯、記憶體洩漏檢測以及效能分析的工具-valgrind

Valgrind這個名字取自北歐神話中英靈殿的入口。 Valgrind的最初作者是Julian Seward,他於2006年由於在開發Valgrind上的工作獲得了第二屆Google-O’Reilly開原始碼獎。 Valgrind遵守GNU通用公共許可證條款,是一款自由軟體。 官

記憶體洩漏檢測分析工具mat(memory analyzer tool) 的使用

.下載、安裝 地址:http://www.eclipse.org/mat/downloads.php  直接解壓即可 初始介面 .獲取對應程序的heapdump,使用jmap命令         jmap -dump:

Windows/Linux下C/C++記憶體洩露檢測工具

一 Window下的記憶體洩露檢測(以VC++環境為例) 靈活自由是C語言的一大特色,但這個特色也難以避免的帶來一些副作用,比如記憶體洩露。眾所周知,記憶體洩露的問題比較複雜,程式正常執行時你看不出它有任何異常,但長時間執行或在特定條件下特定操作重複多次時,它才暴露出來。所

一個簡單的記憶體洩漏檢測C工具

  這個記憶體洩漏檢測工具很簡單,只能檢測同一個模組,同一個執行緒中傳送的記憶體洩漏,對於在編寫程式碼過程中的程式碼除錯有一定的幫助。如果要在整合測試或功能測試中檢測記憶體洩漏,還需藉助專門的工具。 1. 先取向malloc,free和calloc這幾個識別符號的定義:注意

如何使用Valgrind memcheck工具進行C/C++的記憶體洩漏檢測

1. 使用未初始化的記憶體 Code : #include <stdio.h> #include <stdlib.h> int main(void) { char *p; char c = *p; printf("\n [%c]\n",c);