版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、嵌入式原理與應(yīng)用實驗實驗五gcc編譯程序與gdb調(diào)試程序?qū)W號1315212033姓名滕健偉班級13電子二班華僑?;曇電3工程系實驗五gcc編譯程序與gdb調(diào)試程序一、實驗?zāi)康?. 通過幾種不同需求的程序,掌握使用gcc的各種選項編譯程序。2. 通過調(diào)試一個有問題的程序,使讀者進一步熟練使用vi操作,而且熟練掌握 gcc編譯命令及gdb的調(diào)試命令,通過對有問題程序的跟蹤調(diào)試,進一步提 高發(fā)現(xiàn)問題和解決問題的能力。二、實驗內(nèi)容:1、學(xué)習(xí)使用gcc的各種選項編譯程序。(1) 編譯和運行這段程序hell() c:#include <stdio. h>int main(void)printf
2、 ( “hello world!n");return 0;roogcc# v i he i io .croogcc# gcc he 1 lo ac -o he i ioroo t'wsv gcc# ./he i io he i io c)r id!roogcc# |(2) 創(chuàng)建靜態(tài)庫,并運行程序/* pow test. c */#include <stdio.h>#include <stdlib. h>int inain(int argc, char *argv)unsigned int x, y;unsigned long long res;if (
3、argc < 3) | | (sscanf (argvlj, "%u", &x) != 1)i| (sscanf(argv2, "%u", &y) != 1) printf("usage: pow base exponentn);exit (1);res = unsgn_pow(x, y);printf cz%u " %u = %urt, x, y, res);exit (0);/* unsgn_pow. c:庫程序 */unsigned long long unsgn_pow(unsigned int x, u
4、nsigned int y)unsigned long long res = 1;if (v = 0)res = 1;else if (y = 1)res = x;elseres 二 x * unsgn_pow(x, y - 1);return res;創(chuàng)建靜態(tài)庫,然后編譯主程序,并運行結(jié)果。roogcc#roogcc#gcc 一c unsgn_pow. car rcsv 1 ibpow.a unsgn_pov.oa - unsgn_pow,o 【oov gcc# root'wv gcc#2,10 = 1024gcc -o pontes t powtes t ,c -l. - ipow
5、./poutes t 2 10| mogcc#roogcc#roogcc# root(uw gcc #(3) 針對(2)的程序,創(chuàng)建動態(tài)庫,然后編譯主程序,并運行結(jié)果。對比兩者 的區(qū)別。gcc -fpic-wll -c unsgnpow.cgcc -shared -o 1 ibpow. so unsgn_pow.o gcc -o pote s t powtes t .c -l. ipow rootww gcc# 1 she 1 ioi ibpow.apoy_testunsgn_pow.che i io.c i ibpow. so poutes t.c unsgn_pow.o rootxww g
6、cc# gcc -o poutes t pov_tes t .c -l.roogcc# cp i ibpow. so / i ibrootvwiv gcch ./poultes t 2 102,10 = 1024| roo tgcc #(4) 對下面程序進行優(yōu)化編譯,對比優(yōu)化前后的結(jié)果,并解釋說明結(jié)果。#include <stdi() h>int main(void)double counter;double result;double temp;for (counter = 0; counter < 2000.0 * 2000.0 * 2000.0 / 20.0 + 202
7、0;counter +二(5 - 1) / 4) temp = counter / 1979;result 二 counter;printf( result is %lfn” , result); return 0;rootxww gcc# v i 4. croot<w gcc# gcc 4 .c -o 4rootww gcc# t irre ./4result is 400002019.000000irea iorrtl .597s人user0n4.550ssysont) >000srootwuv gcc# gcc -o4.c -o 4roolswv gcc# i im?/4re
8、sult is 400002019.000000rea 10ml .230suser0ml . 180ssysont) .000s|rootw gcc# |對程序進行優(yōu)化z后,可以明顯看出程序運行的時間大大縮短了,提高了程序運行的效率。2、用gdb調(diào)試程序的bug(1) 使用vi編輯器,將以下代碼輸入到名為greet, c的文件中。此代碼的原意 為輸出倒序niqin函數(shù)屮定義的字符串,但結(jié)果顯示沒有輸出。代碼如下所示:#include <stdio. h>int displayl(char *string);int display2(char *string);int main (
9、)char string = ''embedded linux"displayl (string);display2 (string);int displayl (char *string)printf ("the original string is %s nz/, string);int di splay2 (char *stringl)char *string2;int size, i;size = strlen (stringl);string2 = (char *) malloc (size + 1);for (i = 0; i < size
10、; i+)string2size - i二 stringli;string2csize+l二'';printf(z/the string afterward is %sr/:string2);(2) 使用gcc編譯這段代碼,注意要加上“飛”選項以方便之后的調(diào)試。(3) 運行生成的可執(zhí)行文件,觀察運行結(jié)果。rootwv gdb# v i gree t .crootww gdb# gcc -g gree t .c -o gree trootww gdb# ./gree tthe or igna i string is enbedded linuxthe s t r ing af t
11、erward is觀察這段代碼并分析得知,代碼所要實現(xiàn)的功能為將預(yù)先輸入的一段字符串倒序輸出, 由運行結(jié)果可知,最后輸出結(jié)果為空,產(chǎn)生了錯誤輸ul但程序本身語法并不存在錯誤。(4) 使用gdb調(diào)試程序,通過設(shè)置斷點、單步跟蹤,一步步找岀錯誤所在。root<ww gdb# gdb gree tcmj gdb red hit linux (5.3post-0.20021129.18rh)copyr igh t 2003 free sof tmre foundation. inc.(eb is f ree software, covered by the cnj genera i public
12、 license» and you are e iconr to change i t and/or distr ibute copies of i t under cer ta in cond i t ions . type w show copy ing to see the cond i t ions .there is abso lu ttly no ar ran ty for gdb. type " show war ran tyw for details. th is (db wis con t igured as * i386-redha t- i inux-
13、gnuw ,.(gdb) i1 #include<stdio.h>22 int d isp layl(char *s tr ing);3 int d isp iay2(char *s tr ing):54 in t nn in()5 6 char s tr ing = wenbedded linux*;7 d isp lay 1 (str ing);8 d isp iay2 (str ing);(gdb)9 jl2(gdb) b 25breakpo int 1 a t(gdb) b 29breakpo int 2 a t(gdb) info bnim type1 breakpo i
14、nt2 breakpo int首先使用gdb調(diào)試器打開所要調(diào)試文件,再通過gdb中的命令字符list (i)查看載入的文件的 代碼。由觀察分析知,在25行和29行設(shè)置斷點最為合適,設(shè)置斷點后查看所設(shè)置斷點處的信 息。0x804841c: f ile gree t c» i ine 25.0x804844c: file greet .c. 1 ine 29.disp enb address ¥ia tkeep y0x0804841c in d ispiay2 a t gree t.c:25keep y0x0804844c in d isp iay2 a t gree t.c:
15、29緊接著運行代碼,當(dāng)程序運行到斷點25處時自動停止,此時,通過命令“p” +變量名稱查 看變量值,此處,我選擇查看size, string 1和string2的值,通過對原程序的分析可知,size為 字符串string 1的大小,正確;string 1顯示為embedded linux,正確;而string2通過內(nèi)存分配 獲得了相應(yīng)的內(nèi)存,此吋string2為空值;正確。(gdb) ri istart ing program /root/gdb/gree tthe or ignai str ing is enbedded linuxbreakpo int 1. disp iay2 (str
16、ingl =oxbf f fe3f() 'errbedded linux' ) a t gree t .c:2525forj( i=0;i<size;i+)m(gdb) p size$1 = 14(gdb) p str ingl$2 = oxbfffe3fo enbedded linux*(gdb) p string2$3 = 0x80496c0 (gdb) p sting20,l2,3,4.5,6,7,8,9,10,ll.12,13,14$4=0 y選擇繼續(xù)運行代碼,代碼運行到29處時停止,重復(fù)上一步操作可知string20為空值,而 strings-13均相對應(yīng)的值,
17、說明原程序屮循環(huán)嵌套語句屮出現(xiàn)了計算錯誤,錯誤語句為:string2size-i=stri ngl i;(gdb) cycont inuing.人breakpoint 2 display2 (str ingl=0xbfffe3f0 9enbedded linux9) a t gree t.c:2929s t r ing2 size+1 = * *;(gdb) p s"ing201 23,4,5,678.9.10.11,12,13,14$5 =69 'e*(gdb) p str ing2$6 = 0x80496c0 八(gdb) p str ing0bb synbo1 w s t r ingw in current context(gdb) p str ing20$7=0 909(gdb) p str ing21$8 = 120 亡(gdb) p str ing22$9 = 117 w(gdb) p str ing23$10 = 110 h(5) 糾正錯謀,更改源程序并得到正確的結(jié)果。將上述語句更改為string2size-i-l=stringl i,再將程序重新編譯一次, 運行后得到正確結(jié)果。(gdb) q
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年魚塘綜合利用租賃協(xié)議2篇
- 2024年甲乙雙方關(guān)于2024年奧運會贊助權(quán)益分配的合同
- 2025年度蜜蜂產(chǎn)業(yè)聯(lián)盟合作協(xié)議范本3篇
- 2025年度博物館館藏品安全保管與修復(fù)服務(wù)合同3篇
- 2024年規(guī)范版夜間出租車租賃合同版
- 臨沂大學(xué)《民航服務(wù)英語(一)》2023-2024學(xué)年第一學(xué)期期末試卷
- 上海出版印刷高等??茖W(xué)?!洞髮W(xué)英語四》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年連鎖加盟合同樣本
- 鄭州職業(yè)技術(shù)學(xué)院《高級程序語言設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 鄭州工商學(xué)院《病原生物學(xué)B》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年國家公務(wù)員錄用考試公共基礎(chǔ)知識復(fù)習(xí)題庫2500題及答案
- DB3309T 98-2023 登步黃金瓜生產(chǎn)技術(shù)規(guī)程
- DBJ41-T 108-2011 鋼絲網(wǎng)架水泥膨脹珍珠巖夾芯板隔墻應(yīng)用技術(shù)規(guī)程
- 2025年學(xué)長引領(lǐng)的讀書會定期活動合同
- 水利工程全生命周期管理-洞察分析
- 2024年物業(yè)公司服務(wù)質(zhì)量保證合同條款
- JJF(陜) 049-2021 變壓器交流阻抗參數(shù)測試儀校準(zhǔn)規(guī)范
- 詞語理解-2025年中考語文專項復(fù)習(xí)(遼寧專用)(原卷版)
- 娛樂場所突發(fā)事件應(yīng)急措施及疏散預(yù)案(三篇)
- 八大危險作業(yè)安全培訓(xùn)考核試卷
- 老年焦慮癥的護理
評論
0/150
提交評論