【調試】Linux下超強內存檢測工具Valgrind

【調試】Linux下超強內存檢測工具Valgrind

?

內容簡介


  1. Valgrind是什么?
  2. Valgrind的使用
  3. Valgrind詳細教程

1. Valgrind是什么?


Valgrind是一套Linux下,開放源代碼(GPL
V2)的仿真調試工具的集合。Valgrind由內核(core)以及基于內核的其他調試工具組成。

內核類似于一個框架(framework),它模擬了一個CPU環境,并提供服務給其他工具;而其他工具則類似于插件 (plug-in),利用內核提供的服務完成各種特定的內存調試任務。

Valgrind的體系結構如下圖所示:

Valgrind包括如下一些工具:

  • Memcheck:這是valgrind應用最廣泛的工具,一個重量級的內存檢查器,能夠發現開發中絕大多數內存錯誤使用情況,比如:使用未初始化的內存,使用已經釋放了的內存,內存訪問越界等。

  • Callgrind:它主要用來檢查程序中函數調用過程中出現的問題。

  • Cachegrind:它主要用來檢查程序中緩存使用出現的問題。

  • Helgrind:它主要用來檢查多線程程序中出現的競爭問題。

  • Massif:它主要用來檢查程序中堆棧使用中出現的問題。

  • Extension:可以利用core提供的功能,自己編寫特定的內存調試工具。

2. Valgrind的使用

為了使valgrind發現的錯誤更精確,如能夠定位到源代碼行,建議在編譯時加上-g參數,編譯優化選項請選擇O0,雖然這會降低程序的執行效率。

這里用到的示例程序文件名為:test.c,選用的編譯器為gcc。

生成可執行程序

gcc -g -O0 test.c -o test

生成可執行程序test之后,如何使用Valgrind來生成內存的記錄文件呢?一般這樣使用:

valgrind --leak-check=full --log-file=test_valgrind.log --num-callers=30 ./test
  • --log-file 后面的test_valgrind.log是指定生成的日志文件名稱。

  • --num-callers 后面的60是生成的每個錯誤記錄的追蹤行數。30是隨便設定的,如果沒指定,默認是12行貌似(有可能有的追蹤行就沒顯示)。

  • --leak-check=full 表示開啟詳細的內存泄露檢測器。

3. Valgrind詳細教程

詳細教程請看這篇文章:
應用Valgrind發現Linux程序的內存問題


我是謝恩銘,在法國巴黎奮斗的嵌入式軟件工程師。
目前工作是Android嵌入式和app開發。
熱愛生活,喜歡游泳,略懂烹飪。

?Linux探

轉載于:https://www.cnblogs.com/zhehan54/p/6362306.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255499.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255499.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255499.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【python學習】——讀取csv文件

file_name rD:\ParttimeJobs\MinistConfiguration\datas\mnist_train.csv # 數據集為42000張帶標簽的28x28手寫數字圖像y []x []y_t []x_t []with open(file_name, r) as f:reader csv.reader(f)header_row next(reader)# print(header_row)for row in reader:if np.ra…

機器學習實戰(python)-Ch02KNN-Notes

Chapter2 KNN 1.numpy.tile函數 格式:tile(A,reps) * A:array_like * 輸入的array * reps:array_like * A沿各個維度重復的次數 舉例:A[1,2] 1. tile(A,2) 結果:[1,2,1,2] 2. tile(A,(2,3)) 結果…

猜1-10的數字python腳本

#!/usr/bin/python#coding:utf-8import randomnumrandom.randint(1,10)while True:caiint(raw_input(請輸入隨機數字:))if cai num:print 猜對了exit()elif cai > num:print 猜大了else:print 猜小了非交互式的cp腳本#!/usr/bin/python#coding:utf-8import sysfile1sys.arg…

慣量匹配和最佳傳動比

慣量是剛體繞軸轉動慣性的度量,轉動慣量是表征剛體轉動慣性大小的物理量。它是伺服選型的重要標準,如果慣量匹配不好,會導致電機運行不穩定。如小慣量電機制動性能好,運行反應速度快,適用于輕負載、高速定位的環境;而中…

【pyqt5學習】——滑動條的使用slider

1、獲取滑動條當前值: 滑動條名稱.value() self.threshold1 self.horizontalSlider.value() self.threahold2 self.horizontalSlider_2.value() 2、滑動條值改變信號綁定槽函數 滑動條名稱.valueChanged.connect(槽函數) # 滑條值變化 self.horizontalSlider.valu…

hibernate多對一單向外鍵

hibernate多對一單向外鍵: 描述: 轉載于:https://www.cnblogs.com/blogofwyl/p/5402197.html

Spring在bean配置文件中定義電子郵件模板

在上一篇Spring電子郵件教程,硬編碼的所有電子郵件屬性和消息的方法體中的內容,這是不實際的,應予以避免。應該考慮在Spring bean 配置文件中定義電子郵件模板。1.Spring的郵件發件人Java類使用 Spring的MailSender接口發送電子郵件&#xff…

斐波那契數列規律的計算。

斐波那契數列就是某一個數,總是前兩個數之和,比如0,1,1,2,3,5,8。由于輸出是一串數字,可以用列表的結構存儲。開始時,列表中有兩個值,即0&#xf…

【PyQt5學習】——顏色面板使用(QcolorDialog)

from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * BB = QDialogButtonBox# 顏色窗口 class ColorDialog(QColorDialog):def __init__(self, parent=None):super(ColorDialog, self).__init__(parent)self.setOption(QColorDialog.ShowAlph…

PropertyPlaceholderConfigurer實現配置文件讀取

PropertyPlaceholderConfigurer實現配置文件讀取 PropertyPlaceholderConfigurer類的主要的用法是將BeanFactory里定義的內容放在一個.properties的文件中. PropertyPlaceholderConfigurer是個bean工廠后置處理器的實現,也就是BeanFactoryPostProcessor接口的一個實…

算法練習5---快速排序Java版

基本思想:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序…

OPENCV回調函數

OPENCV回調函數 回調函數 回調函數就是一個通過函數指針調用的函數。如果你把函數的指針(地址)作為參數傳遞給另一個函數,當這個指針被用來調用其所指向的函數時,我們就說這是回調函數。回調函數不是由該函數的實現方法直接調用…

PostCSS自學筆記(二)【番外篇二】

圖解PostCSS的插件執行順序 文章其實是一系列的早就寫完了. 才發現忘了發在SegmentFault上面, 最早發布于https://gitee.com/janking/Inf... 這次我繼續研究PostCSS的插件的執行順序。 之前有研究過做過假設,在插件列表中,PostCSS的插件執行順序自上而下…

【Python學習】——實現文本的朗讀(pyttsx3)

import pyttsx3engine = pyttsx3.init() engine.say(三角形)engine.runAndWait() 1、導入第三方庫 import pyttsx32、創建朗讀器 engine = pyttsx3.init() 3、輸入需要朗讀的文本 engine.say(三角形) 4、開始朗讀并且發聲(這一步不能少,不然沒有聲音) engine.runAndWait() 參…

linux命令詳解——iostat

簡介 iostat主要用于監控系統設備的IO負載情況,iostat首次運行時顯示自系統啟動開始的各項統計信息,之后運行iostat將顯示自上次運行該命令以后的統計信息。用戶可以通過指定統計的次數和時間來獲得所需的統計信息。 安裝 yum install -y sysstat 語法 i…

highgui基礎 OpenCV trackbar

在調試程序或者程序執行時需要調整某個變量的值亦或是參數的值,我們需要一個簡單方便的操作,滾動條就是一個非常使用的工具。通過鼠標點擊對滾動條進行拖動操作以期實現調整某個參數的值。下面例程參見Opencv 安裝目錄 samples tutorial_code文件夾。 #i…

匯編 if else

知識點: ?if else ?逆向還原代碼一、了解if else結構 sub esp,8 00401029 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 0040102C |. 3B45 F8 CMP EAX,DWORD PTR SS:[EBP-8] 0040102F |. 7E 10 JLE SHORT ifelse01.00401041 //表示 else部…

chrome瀏覽器開發模式實現跨域

2019獨角獸企業重金招聘Python工程師標準>>> 增加如下參數, --disable-web-security --user-data-dir 啟動項變為: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security --user-data-dir 轉載于…

【糾錯】——QThread: Destroyed while thread is still running

目錄 錯誤 出現場景 解決方案 原始代碼 修改后的代碼 錯誤 QThread: Destroyed while thread is still running 出現場景 在對目標缺陷檢測的GUI設計的時候,為了避免界面的卡頓,于是想著利用線程QThread來解決這個問題,但是做好后&#xf…

Java怎樣處理EXCEL的讀取

須要包:poi-3.5.jar、poi-ooxml-3.5.jar 實例: [java] view plaincopy public class ProcessExcel { private Workbook wb null; private Sheet s null; private Row row null; public ProcessExcel(String filePath) …