<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > Linux下C編程基礎之:實(shí)驗內容

Linux下C編程基礎之:實(shí)驗內容

作者: 時(shí)間:2013-09-13 來(lái)源:網(wǎng)絡(luò ) 收藏

本文引用地址:http://dyxdggzs.com/article/257147.htm

3.7.2用gdb調試程序的bug

1.目的

通過(guò)調試一個(gè)有問(wèn)題的程序,使讀者進(jìn)一步熟練使用vi操作,而且熟練掌握gcc編譯命令及gdb的調試命令,通過(guò)對有問(wèn)題程序的跟蹤調試,進(jìn)一步提高發(fā)現問(wèn)題和解決問(wèn)題的能力。這是一個(gè)很小的程序,只有35行,希望讀者認真調試。

2.內容

(1)使用vi編輯器,將以下代碼輸入到名為greet.c的文件中。此代碼的原意為輸出倒序main函數中定義的字符串,但結果顯示沒(méi)有輸出。代碼如下所示:

#includestdio.h>

intdisplay1(char*string);

intdisplay2(char*string);

intmain()

{

charstring[]=Embedded;

display1(string);

display2(string);

}

intdisplay1(char*string)

{

printf(Theoriginalstringis%sn,string);

}

intdisplay2(char*string1)

{

char*string2;

intsize,i;

size=strlen(string1);

string2=(char*)malloc(size+1);

for(i=0;isize;i++)

{

string2[size-i]=string1[i];

}

string2[size+1]='';

printf(Thestringafterwardis%sn,string2);

}

(2)使用gcc編譯這段代碼,注意要加上“-g”選項以方便之后的調試。

(3)運行生成的可執行文件,觀(guān)察運行結果。

(4)使用gdb調試程序,通過(guò)設置斷點(diǎn)、單步跟蹤,一步步找出錯誤所在。

(5)糾正錯誤,更改源程序并得到正確的結果。

3.步驟

(1)在工作目錄上新建文件greet.c,并用vi啟動(dòng):vigreet.c。

(2)在vi中輸入以上代碼。

(3)在vi中保存并退出,使用命令“:wq”。

(4)用gcc編譯:gcc-ggreet.c-ogreet。

(5)運行g(shù)reet,使用命令“./greet”,輸出為:

TheoriginalstringisEmbedded

Thestringafterwardis

可見(jiàn),該程序沒(méi)有能夠倒序輸出。

(6)啟動(dòng)gdb調試:gdbgreet。

(7)查看源代碼,使用命令“l”。

(8)在30行(for循環(huán)處)設置斷點(diǎn),使用命令“b30”。

(9)在33行(printf函數處)設置斷點(diǎn),使用命令“b33”。

(10)查看斷點(diǎn)設置情況,使用命令“infob”。

(11)運行代碼,使用命令“r”。

(12)單步運行代碼,使用命令“n”。

(13)查看暫停點(diǎn)變量值,使用命令“pstring2[size-i]”。

(14)繼續單步運行代碼數次,并檢查string2[size-1]的值是否正確。

(15)繼續程序的運行,使用命令“c”。

(16)程序在printf前停止運行,此時(shí)依次查看string2[0]、string2[1]…,發(fā)現string[0]沒(méi)有被正確賦值,而后面的賦值都是正確的,這時(shí),定位程序第31行,發(fā)現程序運行結果錯誤的原因在于“size-1”。由于i只能增到“size-1”,這樣string2[0]就永遠不能被賦值而保持NULL,故不能輸出任何結果。

(17)退出gdb,使用命令“q”。

(18)重新編輯greet.c,把其中的“string2[size-i]=string1[i]”改為“string2[size–i-1]=string1[i];”即可。

(19)使用gcc重新編譯:gcc-ggreet.c-ogreet。

(20)查看運行結果:./greet

TheoriginalstringisEmbedded

ThestringafterwardisxuniLdeddedbmE

這時(shí),輸出結果正確。

4.實(shí)驗結果

將原來(lái)有錯的程序經(jīng)過(guò)gdb調試,找出問(wèn)題所在,并修改源代碼,輸出正確的倒序顯示字符串的結果。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


關(guān)鍵詞: C編程 實(shí)驗 Linux VI

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>