實驗一-LinuxC編程工具GCC和GDB_第1頁
實驗一-LinuxC編程工具GCC和GDB_第2頁
實驗一-LinuxC編程工具GCC和GDB_第3頁
實驗一-LinuxC編程工具GCC和GDB_第4頁
實驗一-LinuxC編程工具GCC和GDB_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、淮海工學(xué)院計算機(jī)工程學(xué)院實驗報告書課程名: Linux程序設(shè)計 題 目: 實驗一 Linux C編程工具:GCC和GDB 班 級: 軟件131 學(xué) 號: 2013122870 姓 名: 王裕 評語:成績: 指導(dǎo)教師: 批閱時間: 年 月 日 Linux程序設(shè)計實驗報告 - 5 -一、 實驗?zāi)康呐c要求1. 掌握Linux C開發(fā)過程中的基本概念;2. 掌握如GCC,GDB等開發(fā)工具的使用。二、 實驗內(nèi)容1. 將參考代碼錄入到test1.c文件中,編譯執(zhí)行后發(fā)現(xiàn)結(jié)果與預(yù)期不一致,請使用GDB調(diào)試,完成字符串反序輸出功能。三、 參考源代碼#include <stdio.h>#includ

2、e <stdlib.h>#include <string.h>int reverse_str(char *string); int main (void) char string = "Linux C Tools : GCC and GDB" printf ("The original string is %s n", string); reverse_str (string);int reverse_str (char *str) char *new_str; int i, size; size = strlen (str);

3、if(new_str = (char *) malloc (size + 1) = NULL) return -1; for (i = 0; i < size; i+) new_strsize - i = stri; new_strsize+1 = ' ' printf("The reversed string is %sn",new_str); free(new_str); return 0 ;四、 實驗步驟步驟1. 編輯源代碼test1.cmkdir test1cd test1gedit test1.c(1) 使用gedit編輯器,建議課外學(xué)習(xí)vi

4、m;(2) 分析代碼中語句功能。步驟2. 編譯源代碼test1.cgcc test1.c -o test1 -g(1) 復(fù)習(xí)gcc常用選項;(2) 幫助學(xué)生排查編譯時錯誤。(3) 分析輸出結(jié)果步驟3. 調(diào)試test1 gdb test1(1) 回顧調(diào)試的基本方法:跟蹤語句執(zhí)行過程,觀察執(zhí)行結(jié)果;(2) 設(shè)置斷點的三種基本方法: b <line_number> b <line_number> if condition_expression b <function_name>(3) 查看中間輸出結(jié)果: p <var> set print elemen

5、t 0p <array_name>或<pointer>說明:GDB中查看字符串變量值可通過“set print element 0”命令,一次性顯示字符串所有內(nèi)容。(4) 分析中間結(jié)果,修改28行語句為new_strsize - i-1 = stri;五、 實驗結(jié)果與截圖1. 編寫test1.c文件并編譯2.設(shè)置斷點,進(jìn)行g(shù)db測試跟蹤變量。執(zhí)行到i=27時size-i=0,str27已經(jīng)超過str字符串限制,于是new_str0=0。輸出new_str時,由于超過限制無法輸出。所以修改程序第28行語句為new_strsize - i-1 = stri;正確的程序運行結(jié)

6、果如下圖所示。六、 思考題1. 分析以下代碼,完成指定范圍內(nèi)數(shù)值累加功能:#include <stdio.h>/*函數(shù)功能:將low到high之間的數(shù)值累加求和*/int add_range(int low, int high) int i, sum; for (i = low; i <= high; i+) sum = sum + i; return sum;int main(void) int result2; result0 = add_range(1, 10); result1 = add_range(1, 100); printf("result0=%dn

7、result1=%dn", result0, result1); return 0;答:進(jìn)行累加時,局部變量sum的值會被內(nèi)存保存下來,會導(dǎo)致數(shù)值錯誤,要對其初始化為0。把int i,sum;改為int i;int sum = 0;2. 結(jié)構(gòu)化編程經(jīng)常將相近功能編譯成庫形式,方便調(diào)用。請查閱資料,使用GCC將一組功能相關(guān)的源文件編譯成靜態(tài)庫或動態(tài)庫?建立庫文件的源文件print1.c和print2.c如下所示:/*print1.c */#include <stdio.h>void print1(int arg) printf("%dn", arg);/

8、*print2.c */#include <stdio.h>void print2(char* arg) printf("%sn", arg);調(diào)用庫函數(shù)的源文件為main.c如下:/*main.c */void print1(int arg);void print2(char* arg);int main(int argc, char* argv) int i = 3; char* str = "test libary!n" print1(i); print2(str); return 0 ;生成靜態(tài)庫(myprint.a)并使用的基本步驟

9、步驟1:編譯print1.c, print2.c生成print1.o, print2.o目標(biāo)文件gcc -c print1.c print2.c步驟2:生成myprint靜態(tài)庫文件libmyprint.aar -r libmyprint.a print1.o print2.o步驟3:拷貝庫文件libmyprint.a到/usr/lib目錄下sudo cp libmyprint.a /usr/lib說明:若不將靜態(tài)鏈接庫拷貝到/usr/lib目錄下,在調(diào)用該庫時需通過GCC選項-L指定庫文件所在路徑步驟4:調(diào)用靜態(tài)庫文件,編譯生成可執(zhí)行二進(jìn)制文件gcc -o main main.c -lmypr

10、int生成動態(tài)鏈接庫(myprint.so)并使用的基本步驟步驟1:編譯print1.c, print2.c生成print1.o, print2.o目標(biāo)文件gcc -c -fpic print1.c print2.c注意:GCC選項“-fpic”表示獨立編址,運行時可計算出相應(yīng)的內(nèi)部地址。步驟2:生成myprint動態(tài)鏈接庫libmyprint.sogcc shared print1.o print2.o -o libmyprint.so步驟3:拷貝庫文件libmyprint.so到/usr/lib目錄下sudo cp libmyprint.so /usr/lib步驟4:調(diào)用動態(tài)庫文件,編譯生成可執(zhí)行二進(jìn)制文件gcc -o main main.c libmyprint.so七、 實驗體會本次實驗是Linux的第一次實驗,換了一個環(huán)境,很不適應(yīng),沒有鼠標(biāo)操作的情況下,可以通過上下鍵來選擇vim,gcc等操作,也極為方便了我們的操作,再有就是gdb,語言代碼除了符合最基本的語法規(guī)范之外還必須符合設(shè)計者的邏輯意圖,如果發(fā)現(xiàn)生成的可執(zhí)行文件運行結(jié)果不正確,則可以通過相應(yīng)的調(diào)試環(huán)境來跟蹤調(diào)試,因此需要用到gd

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論