版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、簡(jiǎn)介調(diào)試程序有很多方法,例如向屏幕上打印消息,使用調(diào)試器,或者只需仔細(xì)考慮程序如何運(yùn)行,并對(duì)問題進(jìn)行有根有據(jù)的猜測(cè)。在修復(fù)bug之前,首先要確定在源程序中的位置。例如,當(dāng)一個(gè)程序產(chǎn)生崩潰或生成核心轉(zhuǎn)儲(chǔ)(cedump)時(shí),您就需要了解是哪行代碼發(fā)生了崩潰。在找到有問題的代碼行之后,就可以確定這個(gè)函數(shù)中變量的值,函數(shù)是如何調(diào)用的,更具體點(diǎn)說(shuō),為什么會(huì)發(fā)生這種錯(cuò)誤。使用調(diào)試器查找這些信息非常簡(jiǎn)單。本文將簡(jiǎn)要介紹幾種用于修復(fù)一些很難通過可視化地
2、檢查代碼而發(fā)現(xiàn)的bug的技術(shù),并闡述了如何使用在LinuxonPower架構(gòu)上可用的工具?;仨?yè)首調(diào)試內(nèi)存問題的工具和技術(shù)動(dòng)態(tài)內(nèi)存分配看起來(lái)似乎非常簡(jiǎn)單:您可以根據(jù)需要分配內(nèi)存——使用malloc()或其變種——并在不需要時(shí)釋放這些內(nèi)存。實(shí)際上,內(nèi)存管理的問題是軟件中最為常見的bug,因?yàn)橥ǔT诔绦騿?dòng)時(shí)這些問題并不明顯。例如,程序中的內(nèi)存泄漏可能開始并不為人注意,直到經(jīng)過多天甚至幾個(gè)月的運(yùn)行才會(huì)被發(fā)現(xiàn)。接下來(lái)的幾節(jié)將簡(jiǎn)要介紹如何使用流行
3、的調(diào)試器Valgrind來(lái)發(fā)現(xiàn)并調(diào)試這些最常見的內(nèi)存bug。在開始使用任何調(diào)試工具之前,請(qǐng)考慮這個(gè)工具是否對(duì)重新編譯應(yīng)用程序有益,是否可以支持具有調(diào)試信息的庫(kù)(g選項(xiàng))。如果沒有啟用調(diào)試信息,調(diào)試工具可以做的最好的事情也不過是猜測(cè)一段特定的代碼是屬于哪個(gè)函數(shù)的。這使得錯(cuò)誤消息和概要分析輸出幾乎沒有什么用處。使用g選項(xiàng),您就有可能獲得一些信息來(lái)直接指出相關(guān)的代碼行。ValgrindValgrind已經(jīng)在Linux應(yīng)用程序開發(fā)社區(qū)中廣泛用來(lái)
4、調(diào)試應(yīng)用程序。它尤其擅長(zhǎng)發(fā)現(xiàn)內(nèi)存管理的問題。它可以檢查程序運(yùn)行時(shí)的內(nèi)存泄漏問題。這個(gè)工具目前正由JulianSeward進(jìn)行開發(fā),并由PaulMackerras移植到了Power架構(gòu)上。要安裝Valgrind,請(qǐng)從Valgrind的Web站點(diǎn)上下載源代碼(參閱參考資料)。切換到Valgrind目錄,并執(zhí)行下面的命令:#make#makecheck#makeinstallValgrind的錯(cuò)誤報(bào)告清單清單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的輸出說(shuō)明,有一個(gè)條件分支依賴于文件test1.c中第5行中的
7、一個(gè)未初始化的變量。內(nèi)存泄漏內(nèi)存泄漏是另外一個(gè)常見的問題,也是很多程序中最難判斷的問題。內(nèi)存泄漏的主要表現(xiàn)為:當(dāng)程序連續(xù)運(yùn)行時(shí),與程序相關(guān)的內(nèi)存(或堆)變得越來(lái)越大。結(jié)果是,當(dāng)這個(gè)程序所消耗的內(nèi)存達(dá)到系統(tǒng)的上限時(shí),就會(huì)自己崩潰;或者會(huì)出現(xiàn)更嚴(yán)重的情況:掛起或?qū)е孪到y(tǒng)崩潰。下面是一個(gè)有內(nèi)存泄漏bug的示例程序:清單清單4.4.內(nèi)存泄漏示例內(nèi)存泄漏示例1intmain(void)23p14p256p1=()malloc(512)7p2=()
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- Linux應(yīng)用程序內(nèi)存錯(cuò)誤自動(dòng)化測(cè)試研究.pdf
- Linux下內(nèi)存泄漏的動(dòng)態(tài)跟蹤分析.pdf
- Linux內(nèi)存管理分析與研究.pdf
- 基于進(jìn)程組織的linux內(nèi)存取證分析
- 基于Linux內(nèi)核的內(nèi)存取證系統(tǒng)的研究.pdf
- Java內(nèi)存泄漏發(fā)現(xiàn)技術(shù)研究.pdf
- 嵌入式linux系統(tǒng)中的內(nèi)存泄漏的研究.pdf
- 應(yīng)用程序發(fā)生異常,未知的軟件異常怎么辦?為什么內(nèi)存不能為written,內(nèi)存不能為read?應(yīng)用程序錯(cuò)誤怎么辦?
- Linux內(nèi)核中動(dòng)態(tài)內(nèi)存檢測(cè)機(jī)制的研究.pdf
- 面向Android的嵌入式Linux內(nèi)存管理優(yōu)化.pdf
- 嵌入式應(yīng)用程序內(nèi)存檢測(cè)技術(shù)的研究與實(shí)現(xiàn).pdf
- 嵌入式linux內(nèi)存管理設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于Linux內(nèi)核的多進(jìn)程應(yīng)用程序的開發(fā).pdf
- 發(fā)現(xiàn)的問題
- 基于Linux集群并行應(yīng)用程序監(jiān)控技術(shù)的研究.pdf
- linux2.6內(nèi)存管理反向映射分析與改進(jìn)
- linux 腳本程序編寫基礎(chǔ)
- linux下串口程序開發(fā)
- linux設(shè)備驅(qū)動(dòng)程序
- linux安裝桌面擴(kuò)展程序
評(píng)論
0/150
提交評(píng)論