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函式,我想要的特點...