用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被設計成非侵入式的,它直接工作于可執行文件上,因此在檢查前不需要重新編譯、連接和修改你的程序。要檢查一個程序很簡單,只需要執行下面的命令就可以了
比如我們要對ls -l命令做內存檢查,只需要執行下面的命令就可以了
不管是使用哪個工具,valgrind在開始之前總會先取得對你的程序的控制權,從可執行關聯庫里讀取調試信息。然后在valgrind核心提供的虛擬CPU上運行程序,valgrind會根據選擇的工具來處理代碼,該工具會向代碼中加入檢測代碼,并把這些代碼作為最終代碼返回給valgrind核心,最后valgrind核心運行這些代碼。
如果要檢查內存泄漏,只需要增加 主站蜘蛛池模板: 国产免费一区二区 | 自拍偷拍第一页 | 欧美精品一区二区三区四区 | 一本色道久久综合亚洲精品按摩 | 一区二区中文字幕 | 国产精品久久久久久久久久免费 | aaaaaaa片毛片免费观看 | 欧美日韩无 | 污网址 | 欧美日韩国产在线看 | 国产欧精精久久久久久久 | 午夜精品久久久久久久久久久久 | 国产日产一区二区三区久久久久久 | av一区二区三区在线观看 | 国产成人精品久久 | 亚洲国产成人精品女人 | 日本99精品 | 国产高清精品一区二区三区 | 亚洲欧美一区二区三区在线 | 国产精品一区二区精品 | 欧美日韩电影一区二区 | 久久免费电影 | 四虎成人在线播放 | 精品国产乱码久久久久久影片 | 亚洲精品一区中文字幕乱码 | 福利91 | 1000部羞羞视频在线看视频 | 国产一区二区在线看 | 成人黄色在线视频 | 国产69精品久久久久观看黑料 | 欧美影片| 国产精品视频福利 | 亚洲一区二区三区四区在线观看 | 国产精品国产三级国产aⅴ中文 | 日本www在线 | 在线成人www免费观看视频 | 国产乱码精品一区二区三区五月婷 | 亚洲国产精品久久 | 国产日韩精品在线 | caoporon| 蜜桃久久久久久 |