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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

4、調試應用程序。它尤其擅長發(fā)現(xiàn)內存管理的問題。它可以檢查程序運行時的內存泄漏問題。這個工具目前正由JulianSeward進行開發(fā),并由PaulMackerras移植到了Power架構上。要安裝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、一個未初始化的變量。內存泄漏內存泄漏是另外一個常見的問題,也是很多程序中最難判斷的問題。內存泄漏的主要表現(xiàn)為:當程序連續(xù)運行時,與程序相關的內存(或堆)變得越來越大。結果是,當這個程序所消耗的內存達到系統(tǒng)的上限時,就會自己崩潰;或者會出現(xiàn)更嚴重的情況:掛起或導致系統(tǒng)崩潰。下面是一個有內存泄漏bug的示例程序:清單清單4.4.內存泄漏示例內存泄漏示例1intmain(void)23p14p256p1=()malloc(512)7p2=()

溫馨提示

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

評論

0/150

提交評論