valgrind是乙個gpl的軟體,用於linux(for x86, amd64 and ppc32)程式的記憶體除錯和**剖析。你可以在它的環境中執行你的程式來監視記憶體的使用情況,比如c 語言中的malloc和free或者 c++中的new和 delete。使用
valgrind的工具包,你可以自動的檢測許多記憶體管理和執行緒的bug,避免花費太多的時間在bug尋找上,使得你的程式更加穩固。
valgrind工具包包含多個工具,如memcheck,cachegrind,helgrind, callgrind,massif。下面分別介紹個工具的作用:
memcheck 工具主要檢查下面的程式錯誤:
callgrind收集程式執行時的一些資料,函式呼叫關係等資訊,還可以有選擇地進行cache 模擬。在執行結束時,它會把分析資料寫入乙個檔案。callgrind_annotate可以把這個檔案的內容轉化成可讀的形式。
它模擬 cpu中的一級快取i1,d1和l2二級快取,能夠精確地指出程式中 cache的丟失和命中。如果需要,它還能夠為我們提供cache丟失次數,記憶體引用次數,以及每行**,每個函式,每個模組,整個程式產生的指令數。這對優化程式有很大的幫助。
它主要用來檢查多執行緒程式中出現的競爭問題。helgrind 尋找記憶體中被多個執行緒訪問,而又沒有一貫加鎖的區域,這些區域往往是執行緒之間失去同步的地方,而且會導致難以發掘的錯誤。helgrind實現了名為」 eraser」 的競爭檢測演算法,並做了進一步改進,減少了報告錯誤的次數。
堆疊分析器,它能測量程式在堆疊中使用了多少記憶體,告訴我們堆塊,堆管理塊和棧的大小。massif能幫助我們減少記憶體的使用,在帶有虛擬記憶體的現代系統中,它還能夠加速我們程式的執行,減少程式停留在交換區中的機率。
用法: 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]
下面是一段有問題的c程式**test.c
#includevoid f(void)
//問題2: 記憶體沒有釋放
int main(void)1、 編譯程式test.c
gcc -wall test.c -g -o test
2、 使用
DBMS的主要功能
概述 這五個功能就像dbms的乙個目錄,因為沒有涉及到很多的細節和實用性的技術,所以目前來講沒有多大的價值,如果在深入到細節之後再總覽,就會更加深入地把握好。這五個功能是怎麼提出來的?第1 5個功能是技術上 第2 3 4個功能是實踐需要,根據現實需要不斷完善的,這是需要積累經驗的。提這個問題有什麼意...
以前的主要功能
我有乙個關於以下問題 使用std命名空間 我已經看到它用於像如下所示。那是以前的主要功能。包含iostream 使用std命名空間 詮釋主體 在本教程中,它是在主函式中使用。在visual studio 2008的表達 使用std命名空間 無論是主要功能或內部主要功能產生相同的結果,當你好世界提供的...
Mongodb主要功能特點
mongodb無模式優點 1 儲存形式,相較於傳統的關係型資料庫,它可以使用乙個表儲存原來需要使用多表關聯才能儲存的資料庫。2 儲存動態性,相較於傳統的資料庫當要增加乙個屬性值的時候要對表大動,mongodb的面向文件的形式可以使其屬性值輕意的增加和刪除。而原來 的關係型資料庫要實現這個需要有很多的...