




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025協(xié)同投資基金合同范本格式
- 2025年終止代理合同
- 2025年門座式起重機(jī)司機(jī)理論試題及答案
- 2025共享辦公空間租賃合同深度解析
- 亨廷頓病的臨床護(hù)理
- 脈絡(luò)膜出血的臨床護(hù)理
- 2025年初級經(jīng)濟(jì)師之初級經(jīng)濟(jì)師工商管理模擬考試試卷A卷含答案
- 2025年主治醫(yī)師之全科醫(yī)學(xué)301考前沖刺模擬試卷A卷含答案
- 鐮狀細(xì)胞腎病的臨床護(hù)理
- 新質(zhì)生產(chǎn)力算力
- 吉林省長春市綠園區(qū)2023-2024學(xué)年七年級下學(xué)期期末語文試題(原卷版)
- 解析:2024年湖北省武漢市中考數(shù)學(xué)試題(原卷版)
- 注射相關(guān)感染預(yù)防與控制(全文)
- (正式版)QC∕T 1206.1-2024 電動汽車動力蓄電池?zé)峁芾硐到y(tǒng) 第1部分:通 用要求
- 【標(biāo)準(zhǔn)】電力人工智能訓(xùn)練數(shù)據(jù)集歸集標(biāo)準(zhǔn)
- AQ 1044-2007 礦井密閉防滅火技術(shù)規(guī)范(正式版)
- 足太陽膀胱經(jīng)(經(jīng)絡(luò)腧穴課件)
- 感悟考古智慧樹知到期末考試答案章節(jié)答案2024年北京大學(xué)
- 2024年全國青少年航天創(chuàng)新大賽航天知識競賽試題
- DZ∕T 0204-2022 礦產(chǎn)地質(zhì)勘查規(guī)范 稀土(正式版)
- ~保安勞動勞務(wù)合同書范本
評論
0/150
提交評論