国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

Linux下用Valgrind做檢查(防止內存泄露)

2020-01-26 15:37:42
字體:
來源:轉載
供稿:網友

用C/C++開發其中最令人頭疼的一個問題就是內存管理,有時候為了查找一個內存泄漏或者一個內存訪問越界,需要要花上好幾天時間,如果有一款工具能夠幫助我們做這件事情就好了,valgrind正好就是這樣的一款工具。

Valgrind是一款基于模擬linux下的程序調試器和剖析器的軟件套件,可以運行于x86, amd64和ppc32架構上。valgrind包含一個核心,它提供一個虛擬的CPU運行程序,還有一系列的工具,它們完成調試,剖析和一些類似的任務。valgrind是高度模塊化的,所以開發人員或者用戶可以給它添加新的工具而不會損壞己有的結構。

valgrind的官方網址是:http://valgrind.org
你可以在它的網站上下載到最新的valgrind,它是開放源碼和免費的。

一、介紹

valgrind包含幾個標準的工具,它們是:

1、memcheck

memcheck探測程序中內存管理存在的問題。它檢查所有對內存的讀/寫操作,并截取所有的malloc/new/free/delete調用。因此memcheck工具能夠探測到以下問題:

1)使用未初始化的內存
2)讀/寫已經被釋放的內存
3)讀/寫內存越界
4)讀/寫不恰當的內存棧空間
5)內存泄漏
6)使用malloc/new/new[]和free/delete/delete[]不匹配。

2、cachegrind

cachegrind是一個cache剖析器。它模擬執行CPU中的L1, D1和L2 cache,因此它能很精確的指出代碼中的cache未命中。如果你需要,它可以打印出cache未命中的次數,內存引用和發生cache未命中的每一行代碼,每一個函數,每一個模塊和整個程序的摘要。如果你要求更細致的信息,它可以打印出每一行機器碼的未命中次數。在x86和amd64上,cachegrind通過CPUID自動探測機器的cache配置,所以在多數情況下它不再需要更多的配置信息了。

3、helgrind

helgrind查找多線程程序中的競爭數據。helgrind查找內存地址,那些被多于一條線程訪問的內存地址,但是沒有使用一致的鎖就會被查出。這表示這些地址在多線程間訪問的時候沒有進行同步,很可能會引起很難查找的時序問題。

二、valgrind對你的程序都做了些什么

valgrind被設計成非侵入式的,它直接工作于可執行文件上,因此在檢查前不需要重新編譯、連接和修改你的程序。要檢查一個程序很簡單,只需要執行下面的命令就可以了

復制代碼 代碼如下:
valgrind --tool=tool_name program_name

比如我們要對ls -l命令做內存檢查,只需要執行下面的命令就可以了

復制代碼 代碼如下:
valgrind --tool=memcheck ls -l

不管是使用哪個工具,valgrind在開始之前總會先取得對你的程序的控制權,從可執行關聯庫里讀取調試信息。然后在valgrind核心提供的虛擬CPU上運行程序,valgrind會根據選擇的工具來處理代碼,該工具會向代碼中加入檢測代碼,并把這些代碼作為最終代碼返回給valgrind核心,最后valgrind核心運行這些代碼。

如果要檢查內存泄漏,只需要增加

主站蜘蛛池模板: 屯门区| 江都市| 荆门市| 池州市| 天等县| 邵阳县| 余姚市| 仁怀市| 平陆县| 长顺县| 宁武县| 大名县| 江源县| 桐城市| 邹平县| 永福县| 博湖县| 称多县| 丁青县| 桂平市| 长乐市| 霸州市| 涞水县| 乳源| 永川市| 庐江县| 宜川县| 南雄市| 肇东市| 镇远县| 浪卡子县| 廊坊市| 滨州市| 汕尾市| 当雄县| 古交市| 会宁县| 长岛县| 河曲县| 衡阳县| 普兰店市|