内存检测工具Dr. Memory的使用
Dr. Memory是一個(gè)內(nèi)存調(diào)試工具,它是一個(gè)開源免費(fèi)的內(nèi)存檢測(cè)工具,它能夠及時(shí)發(fā)現(xiàn)內(nèi)存相關(guān)的編程錯(cuò)誤,比如未初始化訪問、內(nèi)存非法訪問、數(shù)組越界讀/寫、以及內(nèi)存泄露等。它可以在Linux、Windows、Mac OS和Android操作系統(tǒng)上使用。關(guān)于Dr. Memory的更多說明可以參考其主頁:http://drmemory.org/
???????? 下面簡(jiǎn)單說下其在Windows7上的使用過程:
1.??????從https://github.com/DynamoRIO/drmemory/wiki/Downloads上下載最新版本1.10.1的壓縮包DrMemory-Windows-1.10.1-3.zip (若官網(wǎng)下不下來可以從http://download.csdn.net/detail/fengbingchun/9545410下載),解壓縮;
2.??????新建DrMemory控制臺(tái)工程,測(cè)試代碼如下:
#include <iostream>void test1(); // 內(nèi)存泄露
void test2(); // 非法訪問
void test3(); // 未初始化讀
void test4(); // Heap 操作參數(shù)錯(cuò)誤(Invalid Heap Argument)int main()
{// reference: http://www.ibm.com/developerworks/cn/linux/1309_liuming_drmemory/test4();std::cout << "ok" << std::endl;return 0;
}void test1()
{char *ptr;for (int i = 0; i<100; i++) {ptr = (char*)malloc(i);if (i % 2) free(ptr);}
}void test2()
{char *x = (char*)malloc(8);char c = *(x + 8); // buffer overlowfree(x);c = *x; // read free memory
}typedef struct T_ {char a;char b;
}T;void test3()
{T a, b;char x;a.a = 'a';a.b = 'b';b.a = x; // error C4700:使用了未初始化的局部變量x,若使vs2013能夠正常編譯,需將配置屬性中的C/C++ SDL檢查關(guān)閉if (b.a == 10)memcpy(&b, &a, sizeof(T));
}void test4()
{char * ptr = NULL;ptr = new char;free(ptr);free(ptr); //
}
3.??????將DrMemory解壓縮后存放到E:\GitCode\DrMemory-Windows-1.10.1-3 下,通過命令提示符打開bin/drmemory.exe或bin64/drmemory.exe,然后輸入命令如下圖所示,目前DrMemory僅能檢測(cè)32位程序,調(diào)用64位程序檢測(cè)不出任何問題,如圖1中紅框所示。執(zhí)行完后會(huì)在E:\GitCode\DrMemory-Windows-1.10.1-3\drmemory\logs\DrMemory-DrMemoryTest[dbg_x64_vc12].exe.972.000目錄下生成相應(yīng)的results.txt文本文件,里面記錄了更多的細(xì)節(jié)。
4.??????test1()的執(zhí)行結(jié)果如下圖:
test2()的執(zhí)行結(jié)果如下圖:
test3()的執(zhí)行結(jié)果如下圖:
test4()的執(zhí)行結(jié)果如下圖:
GitHub:https://github.com/fengbingchun/Messy_Test
總結(jié)
以上是生活随笔為你收集整理的内存检测工具Dr. Memory的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV代码提取:resize函数的
- 下一篇: Tesseract-OCR 3.04在W