跳轉到內容

Valgrind

0% developed
來自華夏公益教科書,開放世界的開放書籍
(從 使用 Valgrind 重定向)

什麼是 Valgrind?

[編輯 | 編輯原始碼]

Valgrind (可在此處下載) 是一個用於除錯 x86 和 x86-64 Linux 平臺程式的實用工具。它最近變得非常流行,因為它可以用來輕鬆地追蹤記憶體管理和執行緒錯誤,這些錯誤在其他情況下很難追蹤。

如何安裝它

[編輯 | 編輯原始碼]

有一個“通用”選項,在大多數系統上都可用,它涉及編譯

user> wget http://valgrind.org/downloads/valgrind-3.8.1.tar.bz2
user> bunzip2 valgrind-3.8.1.tar.bz2 
user> tar -xvf valgrind-3.8.1.tar
user> cd /valgrind-3.8.1
user> ./configure
user> make
user> su root
root> make install

然而,在大多數 Linux 發行版中,你可以使用包管理系統。例如,在 Debian GNU/Linux(及其衍生版)中,只需執行

 apt-get install valgrind

如何使用它

[編輯 | 編輯原始碼]

Valgrind 可以簡單地透過在執行的命令列前加上 valgrind 來執行

 ./myprogram  -o option
 valgrind ./myprogram -o option

這個簡單的測試將檢查程式中的記憶體訪問是否正確。當你收到關於你知道不是問題的程式碼的訊息時,不要感到驚訝。此程式測試每次訪問,一些程式對現有錯誤很寬容。修復這些額外的錯誤始終是值得的,因為當它們導致程式碼中斷時,這些錯誤將無法追蹤。

你可能更喜歡執行 valgrind 並將日誌記錄到文字檔案中,使用以下選項

valgrind --leak-check=full --freelist-vol=100000000 --log-file-exactly=log.txt -v ./myprogram

它是如何工作的

[編輯 | 編輯原始碼]

Valgrind 本質上是一個 x86 機器碼直譯器。事實上,它執行作為一個即時編譯器,將機器碼轉換為內部語言,對該語言進行檢測,然後從該語言生成程式碼。Valgrind 對程式碼進行檢測以監控記憶體分配、釋放、寫入和讀取,這使得它可以儲存記憶體狀態的點陣圖。因此,它可以報告試圖從從未寫入的記憶體中讀取資料,或使用最近釋放的記憶體的嘗試。在 Valgrind 下,程式的執行時間將比未檢測的程式長 2-10 倍左右。

Callgrind 是一個相關的程式,它使用相同的 x86 直譯器技術對程式碼進行檢測以記錄例程呼叫並生成一個檔案,該檔案可以被分析以顯示在各種例程中花費的時間以及涉及的呼叫路徑。

華夏公益教科書