1. 程式人生 > >如何用dmalloc檢測記憶體洩漏(原創)

如何用dmalloc檢測記憶體洩漏(原創)

三下五除二就給說完了

1.從www.dmalloc.com下載一個rpm包(你也可以下載原始碼包,本人比較懶 :) )

2.安裝

3.export DMALLOC_OPTIONS=log=logname,debug=0x3
注:logname是你要生成記錄的檔名

4.在你需要檢測的原始碼裡包含dmalloc.h
#include <dmalloc.h>

5.儲存退出編譯
gcc -ldmalloc -o program code.c

6../program
會在當前目錄下生成一個logname,現在你就可以看到你的程式未釋放的記憶體了
以下是我一個程式的生成的log:


1134286917: 23: Dmalloc version '5.4.2' from 'http://dmalloc.com/'
1134286917: 23: flags = 0x3, logfile 'logfile'
1134286917: 23: interval = 0, addr = 0, seen # = 0, limit = 0
1134286917: 23: starting time = 1134286917
1134286917: 23: process pid = 12088
1134286917: 23: WARNING: tried to free(0) from 'module.c:23'
1134286917: 27: WARNING: tried to free(0) from 'module.c:23'
1134286917: 27: Dumping Chunk Statistics:
1134286917: 27: basic-block 4096 bytes, alignment 8 bytes
1134286917: 27: heap address range: 0x111000 to 0x49c000, 3715072 bytes
1134286917: 27:     user blocks: 4 blocks, 16048 bytes (39%)
1134286917: 27:    admin blocks: 6 blocks, 24576 bytes (60%)
1134286917: 27:    total blocks: 10 blocks, 40960 bytes
1134286917: 27: heap checked 0
1134286917: 27: alloc calls: malloc 14, calloc 0, realloc 0, free 13
1134286917: 27: alloc calls: recalloc 0, memalign 0, valloc 0
1134286917: 27: alloc calls: new 0, delete 0
1134286917: 27:   current memory in use: 432 bytes (3 pnts)
1134286917: 27:  total memory allocated: 6204 bytes (14 pnts)
1134286917: 27:  max in use at one time: 4988 bytes (12 pnts)
1134286917: 27: max alloced with 1 call: 4124 bytes
1134286917: 27: max unused memory space: 4740 bytes (48%)
1134286917: 27: top 10 allocations:
1134286917: 27:  total-size  count in-use-size  count  source
1134286917: 27:        4124      1           0      0  ra=0x6e5910
1134286917: 27:         864      6           0      0  module.c:43
1134286917: 27:         432      3           0      0  module.c:133
1134286917: 27:         432      3         432      3  module.c:185
1134286917: 27:         352      1           0      0  ra=0x6b276d
1134286917: 27:        6204     14         432      3  Total of 5
1134286917: 27: Dumping Not-Freed Pointers Changed Since Start:
1134286917: 27:  not freed: '0x111400|s1' (144 bytes) from 'module.c:185'
1134286917: 27:  not freed: '0x111500|s1' (144 bytes) from 'module.c:185'
1134286917: 27:  not freed: '0x111600|s1' (144 bytes) from 'module.c:185'
1134286917: 27:  total-size  count  source
1134286917: 27:         432      3  module.c:185
1134286917: 27:         432      3  Total of 1
1134286917: 27: ending time = 1134286917, elapsed since start = 0:00:00


可以看到,在185行的程式碼分配的432個位元組的記憶體未被釋放,...............................over

相關推薦

如何用dmalloc檢測記憶體洩漏(原創)

三下五除二就給說完了1.從www.dmalloc.com下載一個rpm包(你也可以下載原始碼包,本人比較懶 :) )2.安裝3.export DMALLOC_OPTIONS=log=logname,debug=0x3注:logname是你要生成記錄的檔名4.在你需要檢測的原始

LeakCanary 檢測記憶體洩漏

轉載自:https://academy.realm.io/cn/posts/droidcon-ricau-memory-leaks-leakcanary/ 我們的 App 曾經遇到很多的記憶體洩漏導致 OutOfMemoryError 的崩潰,一些甚至是在生產環境。Square 的 Pierr

Vc 檢測記憶體洩漏

https://docs.microsoft.com/zh-cn/visualstudio/debugger/finding-memory-leaks-using-the-crt-library?view=vs-2017   啟用記憶體洩漏檢測 檢測記憶體洩漏是 C/c + + 偵錯程式和 C

Visual Studio中檢測記憶體洩漏的方法

Visual Studio中檢測記憶體洩漏的方法 #include <iostream> //可以定位到發生記憶體洩露 所在的檔案和具體那一行,用於檢測 malloc 分配的記憶體 #define _CRTDBG_MAP_ALLOC #include <s

Instruments的Leaks檢測記憶體洩漏

一,使用Leaks開啟APP,操作APP; 二,配置Leaks; 在Leaks欄目下選擇Cycles & Roots和Call Tree進行分析; 1,Cycles & Roots; 2,C

VC使用CRT除錯功能檢測記憶體洩漏

轉載自https://www.cnblogs.com/kex1n/archive/2011/04/27/2030753.html 方法一: 檢測記憶體洩漏的基本工具是偵錯程式和CRT除錯堆函式。為了使用除錯堆函式,在你的程式中你必須含有下面的說明: #define _CRTDBG_MAP_A

為什麼使用LeakCanary檢測記憶體洩漏

為什麼要使用LeakCanary? 不再需要的物件依然被引用,導致物件被分配的記憶體無法被回收,這就是記憶體洩漏的原因。 例如:一個Activity例項物件在呼叫了onDestory方法後是不再被需要的,如果儲存了一個引用Activity物件的靜態域,將導致Ac

iOS總結-檢測記憶體洩漏庫-MLeaksFinder原始碼解析

MLeaksFinder是WeRead團隊開源的一款檢測iOS記憶體洩漏的AOP框架。 優點:無侵入性  可以構建洩漏堆疊  有白名單機制  擴充套件性 其他一些特殊處理 主要涉及到的是基類NSObject+MemoryLeak.h類別裡面,- (BOOL)wi

linux valgrind 檢測記憶體洩漏

1.模擬記憶體洩漏的情況 2.編譯程式 g++ -g -o file file.c,一定要加-g 3.安裝valgrind   sudo apt-get install valgrind 4.執行程式valgrind --leak-check

系統技術非業餘研究 » gcc mudflap 檢測記憶體越界的問題

我們用C語言在做大型伺服器程式的時候,不可避免的要面對記憶體錯誤的問題。典型的問題是記憶體洩漏,越界,隨機亂寫等問題。 在linux下valgrind是個很好的工具,大部分問題都可以查的到的。但是對於更微妙的越界問題,valgrind有時候也是無能為力的。比如下面的問題。 [[email

linux工具之檢測記憶體洩漏-valgrind

0.前言 記憶體洩漏是c++程式常見的問題了,特別是服務類程式,當系統模組過多或者邏輯複雜後,很難通過程式碼看出記憶體洩漏; valgrind是一個開源的,檢測c++程式記憶體洩漏有效工具,編譯時加上-g選項可以定位到程式碼行,同時還檢查‘野指標’,檢查malloc與fre

Linux mtrace命令檢測記憶體洩漏

*這篇來學習一下Linux中的一個命令——mtrace,它是怎麼用的呢?一起來看看。。。→_→* 記憶體洩漏程式碼 #include <stdio.h> int main() {

android使用Leaks檢測記憶體洩漏

Leaks 記憶體洩漏檢測工具使用 debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4-beta2' releaseCompile 'com.squareup.leakcanary:

使用 Android Studio 檢測記憶體洩漏與解決記憶體洩漏問題

  本文在騰訊技術推文上 修改 釋出。     http://wetest.qq.com/lab/view/63.html?from=ads_test2_qqtips&sessionUserType=BFT.PARAMS.195040.TASKID&ADUIN=913337456&a

檢測記憶體洩漏的常見工具-LeakCanary

見到這個標題有經驗的開發者可能要吐槽我是標題黨了,特別是從Eclipse時代走過來的開發者,以為我一要開始貼那張像**一樣的MAT記憶體模型圖或者AndroidStudio中Monitors下的實時記憶體佔用圖,又要開始分析那一條條剪不斷理還亂的記憶體引用鏈,然後費盡九牛

(轉)使用windbg檢測記憶體洩漏

轉載地址:緣起:作為C++程式設計師,檢測記憶體洩漏是非常痛苦的事情。尤其是看著程式的記憶體在一直增長,你卻無能為力。此時,windbg可以用來檢測記憶體洩漏。配置windbg: 配置symbol檔案路徑: “SRV*d:\symbols*http://msdl.micros

vs中檢測記憶體洩漏的方法

使用vs的記憶體檢測有以下幾種方法。 在debug模式下以F5執行: 方法一: #define CRTDBG_MAP_ALLOC     #include <stdlib.h> #include <crtdbg.h> //在入口函式中包含

VS檢測記憶體洩漏,定位洩漏程式碼位置方法

1、什麼是記憶體洩漏? 記憶體洩漏指的是在程式裡動態申請的記憶體在使用完後,沒有進行釋放,導致這部分記憶體沒有被系統回收,久而久之,可能導致程式記憶體不斷增大,系統記憶體不足……引發一系列災難性後果;(關於程式申請記憶體分配方式,詳見:記憶體分配方式) 2、零容忍 排除

vs2008 使用Visual Leak Detector檢測記憶體洩漏

http://hi.baidu.com/maydaygmail/item/8ea6ebef87ca9103560f1dfe 靈活自由是C/C++語言的一大特色,而這也為C/C++程 序員出了一個難題。當程式越來越複雜時,記憶體的管理也會變得越加複雜,稍有不慎就會

Instruments使用之使用Leaks檢測記憶體洩漏

上一篇文章我介紹了Instruments的工具分類和基本使用方法,今天我再來給大家說說Leaks的使用方法。 在早期的iOS開發中,並沒有ARC模式,只有MRC模式,必須由開發人員自己管理記憶體,過程