應用 valgrind 發(fā)現(xiàn) linux 程序的內(nèi)存問題_第1頁
已閱讀1頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、簡介調(diào)試程序有很多方法,例如向屏幕上打印消息,使用調(diào)試器,或者只需仔細考慮程序如何運行,并對問題進行有根有據(jù)的猜測。在修復bug之前,首先要確定在源程序中的位置。例如,當一個程序產(chǎn)生崩潰或生成核心轉(zhuǎn)儲(cedump)時,您就需要了解是哪行代碼發(fā)生了崩潰。在找到有問題的代碼行之后,就可以確定這個函數(shù)中變量的值,函數(shù)是如何調(diào)用的,更具體點說,為什么會發(fā)生這種錯誤。使用調(diào)試器查找這些信息非常簡單。本文將簡要介紹幾種用于修復一些很難通過可視化地

2、檢查代碼而發(fā)現(xiàn)的bug的技術(shù),并闡述了如何使用在LinuxonPower架構(gòu)上可用的工具?;仨撌渍{(diào)試內(nèi)存問題的工具和技術(shù)動態(tài)內(nèi)存分配看起來似乎非常簡單:您可以根據(jù)需要分配內(nèi)存——使用malloc()或其變種——并在不需要時釋放這些內(nèi)存。實際上,內(nèi)存管理的問題是軟件中最為常見的bug,因為通常在程序啟動時這些問題并不明顯。例如,程序中的內(nèi)存泄漏可能開始并不為人注意,直到經(jīng)過多天甚至幾個月的運行才會被發(fā)現(xiàn)。接下來的幾節(jié)將簡要介紹如何使用流行

3、的調(diào)試器Valgrind來發(fā)現(xiàn)并調(diào)試這些最常見的內(nèi)存bug。在開始使用任何調(diào)試工具之前,請考慮這個工具是否對重新編譯應用程序有益,是否可以支持具有調(diào)試信息的庫(g選項)。如果沒有啟用調(diào)試信息,調(diào)試工具可以做的最好的事情也不過是猜測一段特定的代碼是屬于哪個函數(shù)的。這使得錯誤消息和概要分析輸出幾乎沒有什么用處。使用g選項,您就有可能獲得一些信息來直接指出相關(guān)的代碼行。ValgrindValgrind已經(jīng)在Linux應用程序開發(fā)社區(qū)中廣泛用來

4、調(diào)試應用程序。它尤其擅長發(fā)現(xiàn)內(nèi)存管理的問題。它可以檢查程序運行時的內(nèi)存泄漏問題。這個工具目前正由JulianSeward進行開發(fā),并由PaulMackerras移植到了Power架構(gòu)上。要安裝Valgrind,請從Valgrind的Web站點上下載源代碼(參閱參考資料)。切換到Valgrind目錄,并執(zhí)行下面的命令:#make#makecheck#makeinstallValgrind的錯誤報告清單清單3.3.ValgrindValgr

5、ind的輸出消息的輸出消息#gcc–g–otest1test1.c#valgrind.test1..==31363====31363==Conditionaljumpmovedependsonuninitialisedvalue(s)==31363==at0x1000041C:main(test1.c:5)==31363====31363==ERRSUMMARY:1errsfrom1contexts(suppressed:7from1)

6、==31363==mallocfree:inuseatexit:0bytesin0blocks.==31363==mallocfree:0allocs0frees0bytesallocated.==31363==Fcountsofdetectederrsrerunwith:v==31363==Nomallocdblocksnoleaksarepossible.Valgrind的輸出說明,有一個條件分支依賴于文件test1.c中第5行中的

7、一個未初始化的變量。內(nèi)存泄漏內(nèi)存泄漏是另外一個常見的問題,也是很多程序中最難判斷的問題。內(nèi)存泄漏的主要表現(xiàn)為:當程序連續(xù)運行時,與程序相關(guān)的內(nèi)存(或堆)變得越來越大。結(jié)果是,當這個程序所消耗的內(nèi)存達到系統(tǒng)的上限時,就會自己崩潰;或者會出現(xiàn)更嚴重的情況:掛起或?qū)е孪到y(tǒng)崩潰。下面是一個有內(nèi)存泄漏bug的示例程序:清單清單4.4.內(nèi)存泄漏示例內(nèi)存泄漏示例1intmain(void)23p14p256p1=()malloc(512)7p2=()

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論