Valgrind的主要功能

2021-04-15 16:11:56 字數 2204 閱讀 6755

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

#include 

void 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的面向文件的形式可以使其屬性值輕意的增加和刪除。而原來 的關係型資料庫要實現這個需要有很多的...