Valgrind 使用簡單說明

2021-06-09 05:47:43 字數 2549 閱讀 1519

valgrind能做什麼?

記憶體使用檢測,包括:

– 記憶體洩漏

– 非法記憶體訪問

– 未初始化變數使用

– 重複釋放記憶體

• 多執行緒競爭

–檢測 死鎖

-檢測競爭

valgrind還能做什麼?

• 效能分析

–cachegrind+ cg_annotate

使用方法:

–callgrind+ callgrind_annotate/kcachegrind

比起cachegrind而言callgrind更有用。callgrind在cachegrind基礎上實現,可以視覺化展示函式呼叫關係,以及每個函式在整個程序執行過程中所佔的成本。對於

• helgrind

/drd

– posixapi

誤用–潛在的死鎖提醒

– 資料競爭

• massif

– 記憶體分析工具,統計程序使用的記憶體情況,包括堆、棧

valgrind—— memcheck

用法:valgrind--tool=memcheck--leak-check=yes ./grog

輸出:memcheck 工具主要檢查下面的程式錯誤:

callgrind

callgrind收集程式執行時的一些資料,函式呼叫關係等資訊,還可以有選擇地進行cache 模擬。在執行結束時,它會把分析資料寫入乙個檔案。callgrind_annotate可以把這個檔案的內容轉化成可讀的形式。

cachegrind

它模擬 cpu中的一級快取i1,d1和l2二級快取,能夠精確地指出程式中 cache的丟失和命中。如果需要,它還能夠為我們提供cache丟失次數,記憶體引用次數,以及每行**,每個函式,每個模組,整個程式產生的指令數。這對優化程式有很大的幫助。

helgrind

它主要用來檢查多執行緒程式中出現的競爭問題。helgrind 尋找記憶體中被多個執行緒訪問,而又沒有一貫加鎖的區域,這些區域往往是執行緒之間失去同步的地方,而且會導致難以發掘的錯誤。helgrind實現了名為」 eraser」 的競爭檢測演算法,並做了進一步改進,減少了報告錯誤的次數。

massif

堆疊分析器,它能測量程式在堆疊中使用了多少記憶體,告訴我們堆塊,堆管理塊和棧的大小。massif能幫助我們減少記憶體的使用,在帶有虛擬記憶體的現代系統中,它還能夠加速我們程式的執行,減少程式停留在交換區中的機率。

valgrind 安裝

用法: valgrind [options] prog-and-args [options]: 常用選項,適用於所有valgrind工具

-tool=最常用的選項。執行 valgrind中名為toolname的工具。預設memcheck。

h –help 顯示幫助資訊。

-version 顯示valgrind核心的版本,每個工具都有各自的版本。

q –quiet 安靜地執行,只列印錯誤資訊。

v –verbose 更詳細的資訊, 增加錯誤數統計。

-trace-children=no|yes 跟蹤子執行緒? [no]

-track-fds=no|yes 跟蹤開啟的檔案描述?[no]

-time-stamp=no|yes 增加時間戳到log資訊? [no]

-log-fd=輸出log到描述符檔案 [2=stderr]

-log-file=將輸出的資訊寫入到filename.pid的檔案裡,pid是執行程式的進行id

-log-file-exactly=輸出log資訊到 file

-log-file-qualifier=取得環境變數的值來做為輸出資訊的檔名。 [none]

-log-socket=ipaddr:port 輸出log到socket ,ipaddr:port

log資訊輸出

-xml=yes 將資訊以xml格式輸出,只有memcheck可用

-num-callers=show callers in stack traces [12]

-error-limit=no|yes 如果太多錯誤,則停止顯示新錯誤? [yes]

-error-exitcode=如果發現錯誤則返回錯誤** [0=disable]

-db-attach=no|yes 當出現錯誤,valgrind會自動啟動偵錯程式gdb。[no]

-db-command=啟動偵錯程式的命令列選項[gdb -nw %f %p]

-leak-check=no|summary|full 要求對leak給出詳細資訊? [summary]

-leak-resolution=low|med|high how much bt merging in leak check [low]

-show-reachable=no|yes show reachable blocks in leak check? [no]

valgrind 使用舉例

下面是一段有問題的c程式**test.c

#include

void f(void)

//問題2: 記憶體沒有釋放int main(void)

valgrind安裝簡單說明

valgrind 是linux下一種很方便的記憶體問題檢測工具。下面簡單記錄我在按裝碰到的問題。2.解壓後,可以閱讀reade,文件中簡單安裝提示 3.接下來輸入.confure進行配置 4.配置完成後使用make命令 5.最後使用make install命令進行安裝 安裝成功後,使用valgrin...

djvulibre使用簡單說明

3.開啟 djvulibre 3.5.27 win32 djvulibre,找到djvulibre.sln,使用vs開啟,這裡我使用的vs2010,其他版本應該也能開啟。4.開啟的工程裡面有不同的專案,對應的專案的功能在 djvulibre 3.5.27 doc djvulibre book en....

FormatMessage簡單說明

常用引數簡介.formatmessage format message from system format message allocate buffer,null,lval,null,lptstr hlocal,0,null 第乙個引數是標誌,告訴這個formatmessage函式,我想要的特點...