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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、淮海工學院計算機工程學院實驗報告書課程名: Linux程序設計 題 目: 實驗一 Linux C編程工具:GCC和GDB 班 級: 軟件131 學 號: 2013122870 姓 名: 王裕 評語:成績: 指導教師: 批閱時間: 年 月 日 Linux程序設計實驗報告 - 5 -一、 實驗目的與要求1. 掌握Linux C開發(fā)過程中的基本概念;2. 掌握如GCC,GDB等開發(fā)工具的使用。二、 實驗內容1. 將參考代碼錄入到test1.c文件中,編譯執(zhí)行后發(fā)現結果與預期不一致,請使用GDB調試,完成字符串反序輸出功能。三、 參考源代碼#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編輯器,建議課外學習vi

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

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

6、果如下圖所示。六、 思考題1. 分析以下代碼,完成指定范圍內數值累加功能:#include <stdio.h>/*函數功能:將low到high之間的數值累加求和*/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;答:進行累加時,局部變量sum的值會被內存保存下來,會導致數值錯誤,要對其初始化為0。把int i,sum;改為int i;int sum = 0;2. 結構化編程經常將相近功能編譯成庫形式,方便調用。請查閱資料,使用GCC將一組功能相關的源文件編譯成靜態(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);調用庫函數的源文件為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目標文件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目錄下,在調用該庫時需通過GCC選項-L指定庫文件所在路徑步驟4:調用靜態(tài)庫文件,編譯生成可執(zhí)行二進制文件gcc -o main main.c -lmypr

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論