版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
嵌入式原理與應(yīng)用實(shí)驗(yàn)實(shí)驗(yàn)五gCC編譯程序與gdb調(diào)試程序?qū)W號姓名滕健偉班級13電子二班華僑大學(xué)電3工程系實(shí)驗(yàn)五gCc編譯程序與gdb調(diào)試程序一、實(shí)驗(yàn)?zāi)康?通過幾種不同需求的程序,掌握使用gcc的各種選項(xiàng)編譯程序。.通過調(diào)試一個(gè)有問題的程序,使讀者進(jìn)一步純熟使用vi操作,并且純熟掌握gcc編譯命令及gdb的調(diào)試命令,通過對有問題程序的跟蹤調(diào)試,進(jìn)一步提高發(fā)現(xiàn)問題和解決問題的能力。二、實(shí)驗(yàn)內(nèi)容:1、學(xué)習(xí)使用gCC的各種選項(xiàng)編譯程序。(1)編譯和運(yùn)營這段程序hello.c:#include<stdio.h>intmain(void)(printf(“He1lowor1d!\n”);return0;)[root^Xwwgcc]#viheIlo.c[roogcc]#gccheIlo.c-oheIlo[root^Xwwgcc]#./heIloheIloworld!丫[roogcc]#1人(2)創(chuàng)建靜態(tài)庫,并運(yùn)營程序/*powtest.c*/include<stdio.h>inc1ude<stdlib.h>intmain(intargc,char*argv[])unsignedintx,y;unsignedlong1ongres;if((argc<3)||(sscanf(argv[l],〃與u“,&x)!=1)||(sscanf(argv[2],"%u”,&y))!=1)(printf(^Usage:powbaseexponent\n^);exit(1);)res=unsgn_pow(x,y);printf("%u"%u=%u\n,,?x,y,res);exit(0);)/*unsgn_pow.c:庫程序*/unsignedIong1ongunsgn_pow(unsignedintx,unsignedinty)(unsigned1onglongres=1;if(y==0)(res=1;)elseif(y==1)(res=x;)else
res=x*unsgn_pow(x,y-1);returnres;)創(chuàng)建靜態(tài)庫,然后編譯主程序,并運(yùn)營結(jié)果。[root'^wwgcc]#gcc-cunsgn_pow.c[root<?Awwgcc]#arrcsvIibpow.aunsgn_pow.oa-unsgn_pow.o[root^Xwwgcc]#gcc-opow_testpow_te$t.c-L.-1pow[root^wwgcc]#./po\v_test2102*10=1024|[root^wwgcc]#(3)針對(2)的程序,創(chuàng)建動(dòng)態(tài)庫,然后編譯主程序,并運(yùn)營結(jié)果。對比兩者[root^wwgcc]#[root^wwgcc]#[root^Xwwgcc]#[root^wwgcc]#[root^wwgcc]#[root^Xwwgcc]#[root^wwgcc]#[root^wwgcc]#[root^Xwwgcc]#gcc-fPlC11-cunsgn_pow.cgcc-shared-oIibpow.sounsgn_pow.o[root^wwgcc]#[root^wwgcc]#[root^Xwwgcc]#gcc-opou^testpou^test.c-L.Ipow[root^wvgcc]#IsheIIo1ibpow.apow_testunsgn_pow.cheIIo.cIibpow.sopow^test.cunsgn_pow.o[root^Xwwgcc]#gcc-opou^testpo\y_test.c-L.-1pow[rool(^wwgcc]#cpIibpow.so/Iib[root^wvgcc]#./povv_test2102*10=1024[roogcc]#)(4)對下面程序進(jìn)行優(yōu)化編譯,對比優(yōu)化前后的結(jié)果,并解釋說明結(jié)果。#include<stdio.h>intmain(void)(doublecounter;doubletemp;fordoub1eresu1t;(counter=0:doubletemp;for+2023;counter+=(5-1)/4){temp=counter/1979;result=counter;)printf("Resultis%1f\\nn,resu1t);return0;)[root^Kwwgcc]#vi4.c[root^wwgcc]#gcc4.c-o4[root/Awwgcc]#tint./4Resultis400002019.000000Trea)0ml.597s人user0n4.550ssysOnO.000s[roogcc]#gcc-O4.c-o4[roogcc]#tim?./4Resultis400002019.000000reaI0ml.230suser0ml.180ssysOnO.000s|[root<SKwwgcc]#|對程序進(jìn)行優(yōu)化之后,可以明顯看出程序運(yùn)營的時(shí)間大大縮短了,提高了程序運(yùn)營的效率。2、用gdb調(diào)試程序的bug(1)使用vi編輯器,將以下代碼輸入到名為greet,c的文獻(xiàn)中。此代碼的原意為輸出倒序main函數(shù)中定義的字符串,但結(jié)果顯示沒有輸出。代碼如下所示:#include<stdio.h>intdisplay1(char*string);intdisplay2(char*string);intmain()(charstring[]=^EmbeddedLinux";displayl(string);display2(string);)intdisp1ayl(char*string)(printf("Theorigina1stringis%s'n”,string);)intdisplay2(char*stringl)char*string2;intsize,i;size=strlen(stringl);string2=(char*)ma11oc(size+1);for(i=0;i<size;i++)(string2[size—i]=stringl[i];)string2[size+1]=';printf(,/Thestringafterwardis%s\n",string2);)(2)使用gcc編譯這段代碼,注意要加上“飛”選項(xiàng)以方便之后的調(diào)試。(3)運(yùn)營生成的可執(zhí)行文獻(xiàn),觀測運(yùn)營結(jié)果。[root^Kwwgdb]#vigreet.c[root^wwgdb]#gcc-ggreet.c-ogreetY[root^wwgdb]#./greet人TheorignaIstringisEnbeddedLinuxThestringafterwardis觀測這段代碼并分析得知,代碼所要實(shí)現(xiàn)的功能為將預(yù)先輸入的一段字符串倒序輸出,由運(yùn)營結(jié)果可知,最后輸出結(jié)果為空,產(chǎn)生了錯(cuò)誤輸出,但程序自身語法并不存在錯(cuò)誤。(4)使用gdb調(diào)試程序,通過設(shè)立斷點(diǎn)、單步跟蹤,一步步找犯錯(cuò)誤所在。
[root^wwgdb]#gdbgreetGNUgdbRedlbtLinux(5.3post-0.20021129.18rh)Gopyright2003FreeSoftwareFoundstion,Inc.(BBisfreesoftware,coveredbythe(MJ(JeneraIPubIicLicense,andyouare\\eIcom?tochangeitand/ordistributecopiesofitundercertainconditions.Type,showcopying'toseetheconditions.Thereisabsolutelynowarrantyfor(IB.Type,showwarranty,fordetai1s.This(QBwasconfiguredas,i386-redhat-Iinux-gnu*...(gdb)I#include<stdio.h>intdisplayl(char#string);intdispIay2(char?string);intnBin(){charstring[]=*EnbeddedLinux*;displayl(string);di沖Iay2(string);(gdb)}I12一方面使用gdb調(diào)試器打開所要調(diào)試文獻(xiàn),再通過gdb中的命令字符ist(l)查看載人的文獻(xiàn)的代碼。由觀測分析知,在25行和29行設(shè)立斷點(diǎn)最為合適,設(shè)立斷點(diǎn)后查看所設(shè)立斷點(diǎn)處的信(gdb)b25fiIegreet.c,Iine25.fiIegreet.c,Iine29.fiIegreet.c,Iine25.fiIegreet.c,Iine29.AddressVfiat0x0804841cindispIay2at0x0804844cindispIay2at(gdb)b29Breakpoint2at0x804844c:(gdb)infobgreet.cgreet.c:25greet.c:29greet.c:25greet.c:29MimTypeDispEnbgreet.c:25greet.c:29breakpointkeepy緊接著運(yùn)營代碼,當(dāng)程序運(yùn)營到斷點(diǎn)25處時(shí)自動(dòng)停止,此時(shí),通過命令“p”+變量名稱查看變量值,此處,我選擇杳看size,string1和string2的值,通過對原程序的分析可知,size為字符串string1的大小,對的;stringl顯示為EmbeddedLinux,對的;而string2通過內(nèi)存分派獲得了相應(yīng)的內(nèi)存,此時(shí)string2為空值;對的。(gdb)rStartingprogram/root/gdb/greetTheorignaIstringisEnbeddcdLinuxBreakpoint1.dispIay2(stringl=Oxbfffe3f0*EnbeddedLinux*)atgreet.c:2525forl(i=0;i<size;i++)(gdb)psize$1=14(gdb)pstringl$2=0xbfffe3f0'EnbeddedLinux,(gdb)pstring2$3=0x80496c0八(gdb)pstring2[0,l,2,3,4,5,6,7,8,9,10,11,12,13,14]$4=0'\0,選擇繼續(xù)運(yùn)營代碼,代碼運(yùn)營到29處時(shí)停止,反更上一步操作可知string2[0]為空值,而siring[l?13]均相相應(yīng)的值,說明原程序中循環(huán)嵌套語句中出現(xiàn)了計(jì)算錯(cuò)誤,錯(cuò)誤語句為:String2[size-i]=stringl[i];(gdb)cYGontinuing.又Breakpoint2,dispIay2(stringl=0xbfffe3f0*EnbeddedLinux*)atgreet.c:2929string2[size+1]='*;(gdb)pstring2[0J,2,3,4.5,6.7,8,9,10.11.12,13,14]$5=69E(gdb)pstrin
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 同行競爭協(xié)議合同范本
- 2025年度企業(yè)自駕游租車合同二零二五年度專用3篇
- 2025版建筑起重機(jī)械租賃價(jià)格體系構(gòu)建及質(zhì)量控制合同3篇
- 2025年度個(gè)人土地承包權(quán)流轉(zhuǎn)保證金合同范本3篇
- 2025年全球及中國高效微??諝膺^濾器行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025-2030全球陽極氧化再生行業(yè)調(diào)研及趨勢分析報(bào)告
- 2024年拉絲工職業(yè)技能競賽理論考試題庫(含答案)
- 2025年度個(gè)人租賃房屋租賃合同租賃物損壞賠償條款
- 二零二五年度車庫使用權(quán)抵押貸款合同4篇
- 2025年度個(gè)人旅游保險(xiǎn)代理合同6篇
- 2024年安全教育培訓(xùn)試題附完整答案(奪冠系列)
- 神農(nóng)架研學(xué)課程設(shè)計(jì)
- 文化資本與民族認(rèn)同建構(gòu)-洞察分析
- 2025新譯林版英語七年級下單詞默寫表
- 【超星學(xué)習(xí)通】馬克思主義基本原理(南開大學(xué))爾雅章節(jié)測試網(wǎng)課答案
- 《錫膏培訓(xùn)教材》課件
- 斷絕父子關(guān)系協(xié)議書
- 福建省公路水運(yùn)工程試驗(yàn)檢測費(fèi)用參考指標(biāo)
- 2024年中國工業(yè)涂料行業(yè)發(fā)展現(xiàn)狀、市場前景、投資方向分析報(bào)告(智研咨詢發(fā)布)
- 自然科學(xué)基礎(chǔ)(小學(xué)教育專業(yè))全套教學(xué)課件
- 《工程勘察資質(zhì)分級標(biāo)準(zhǔn)和工程設(shè)計(jì)資質(zhì)分級標(biāo)準(zhǔn)》
評論
0/150
提交評論