




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、淮海工學(xué)院計(jì)算機(jī)工程學(xué)院實(shí)驗(yàn)報(bào)告書課程名: Linux程序設(shè)計(jì) 題 目: 實(shí)驗(yàn)一 Linux C編程工具:GCC和GDB 班 級(jí): 軟件131 學(xué) 號(hào): 2013122870 姓 名: 王裕 評(píng)語(yǔ):成績(jī): 指導(dǎo)教師: 批閱時(shí)間: 年 月 日 Linux程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告 - 5 -一、 實(shí)驗(yàn)?zāi)康呐c要求1. 掌握Linux C開發(fā)過(guò)程中的基本概念;2. 掌握如GCC,GDB等開發(fā)工具的使用。二、 實(shí)驗(yàn)內(nèi)容1. 將參考代碼錄入到test1.c文件中,編譯執(zhí)行后發(fā)現(xiàn)結(jié)果與預(yù)期不一致,請(qǐng)使用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 ;四、 實(shí)驗(yàn)步驟步驟1. 編輯源代碼test1.cmkdir test1cd test1gedit test1.c(1) 使用gedit編輯器,建議課外學(xué)習(xí)vi
4、m;(2) 分析代碼中語(yǔ)句功能。步驟2. 編譯源代碼test1.cgcc test1.c -o test1 -g(1) 復(fù)習(xí)gcc常用選項(xiàng);(2) 幫助學(xué)生排查編譯時(shí)錯(cuò)誤。(3) 分析輸出結(jié)果步驟3. 調(diào)試test1 gdb test1(1) 回顧調(diào)試的基本方法:跟蹤語(yǔ)句執(zhí)行過(guò)程,觀察執(zhí)行結(jié)果;(2) 設(shè)置斷點(diǎn)的三種基本方法: 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>說(shuō)明:GDB中查看字符串變量值可通過(guò)“set print element 0”命令,一次性顯示字符串所有內(nèi)容。(4) 分析中間結(jié)果,修改28行語(yǔ)句為new_strsize - i-1 = stri;五、 實(shí)驗(yàn)結(jié)果與截圖1. 編寫test1.c文件并編譯2.設(shè)置斷點(diǎn),進(jìn)行g(shù)db測(cè)試跟蹤變量。執(zhí)行到i=27時(shí)size-i=0,str27已經(jīng)超過(guò)str字符串限制,于是new_str0=0。輸出new_str時(shí),由于超過(guò)限制無(wú)法輸出。所以修改程序第28行語(yǔ)句為new_strsize - i-1 = stri;正確的程序運(yùn)行結(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)行累加時(shí),局部變量sum的值會(huì)被內(nèi)存保存下來(lái),會(huì)導(dǎo)致數(shù)值錯(cuò)誤,要對(duì)其初始化為0。把int i,sum;改為int i;int sum = 0;2. 結(jié)構(gòu)化編程經(jīng)常將相近功能編譯成庫(kù)形式,方便調(diào)用。請(qǐng)查閱資料,使用GCC將一組功能相關(guān)的源文件編譯成靜態(tài)庫(kù)或動(dòng)態(tài)庫(kù)?建立庫(kù)文件的源文件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)用庫(kù)函數(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)庫(kù)(myprint.a)并使用的基本步驟
9、步驟1:編譯print1.c, print2.c生成print1.o, print2.o目標(biāo)文件gcc -c print1.c print2.c步驟2:生成myprint靜態(tài)庫(kù)文件libmyprint.aar -r libmyprint.a print1.o print2.o步驟3:拷貝庫(kù)文件libmyprint.a到/usr/lib目錄下sudo cp libmyprint.a /usr/lib說(shuō)明:若不將靜態(tài)鏈接庫(kù)拷貝到/usr/lib目錄下,在調(diào)用該庫(kù)時(shí)需通過(guò)GCC選項(xiàng)-L指定庫(kù)文件所在路徑步驟4:調(diào)用靜態(tài)庫(kù)文件,編譯生成可執(zhí)行二進(jìn)制文件gcc -o main main.c -lmypr
10、int生成動(dòng)態(tài)鏈接庫(kù)(myprint.so)并使用的基本步驟步驟1:編譯print1.c, print2.c生成print1.o, print2.o目標(biāo)文件gcc -c -fpic print1.c print2.c注意:GCC選項(xiàng)“-fpic”表示獨(dú)立編址,運(yùn)行時(shí)可計(jì)算出相應(yīng)的內(nèi)部地址。步驟2:生成myprint動(dòng)態(tài)鏈接庫(kù)libmyprint.sogcc shared print1.o print2.o -o libmyprint.so步驟3:拷貝庫(kù)文件libmyprint.so到/usr/lib目錄下sudo cp libmyprint.so /usr/lib步驟4:調(diào)用動(dòng)態(tài)庫(kù)文件,編譯生成可執(zhí)行二進(jìn)制文件gcc -o main main.c libmyprint.so七、 實(shí)驗(yàn)體會(huì)本次實(shí)驗(yàn)是Linux的第一次實(shí)驗(yàn),換了一個(gè)環(huán)境,很不適應(yīng),沒有鼠標(biāo)操作的情況下,可以通過(guò)上下鍵來(lái)選擇vim,gcc等操作,也極為方便了我們的操作,再有就是gdb,語(yǔ)言代碼除了符合最基本的語(yǔ)法規(guī)范之外還必須符合設(shè)計(jì)者的邏輯意圖,如果發(fā)現(xiàn)生成的可執(zhí)行文件運(yùn)行結(jié)果不正確,則可以通過(guò)相應(yīng)的調(diào)試環(huán)境來(lái)跟蹤調(diào)試,因此需要用到gd
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)一年級(jí)上冊(cè)-北師大數(shù)學(xué)第四單元檢測(cè)卷
- (二模)淄博市2024-2025 學(xué)年度部分學(xué)校高三階段性診斷檢測(cè)生物試卷(含標(biāo)準(zhǔn)答案)
- 2024年紡織品設(shè)計(jì)師考試經(jīng)驗(yàn)分享和試題答案
- 培養(yǎng)思維的2024年紡織品檢驗(yàn)員證書的試題及答案
- 2024年國(guó)際商業(yè)美術(shù)設(shè)計(jì)師考試試題及答案精要
- 柿餅釣魚測(cè)試題及答案
- 改革對(duì)社會(huì)發(fā)展的作用
- 機(jī)織與針織物檢測(cè)的差異試題及答案
- 字形美感測(cè)試題及答案
- 廣告理論與實(shí)務(wù)助理廣告師考試試題及答案
- 2024年全國(guó)青少年航天創(chuàng)新大賽航天知識(shí)競(jìng)賽試題
- DB11∕2075-2022 建筑工程減隔震技術(shù)規(guī)程
- 鉛鋅礦的冶煉技術(shù)進(jìn)展與設(shè)備改進(jìn)
- 煤礦勞動(dòng)組織管理培訓(xùn)課件
- 倉(cāng)儲(chǔ)績(jī)效考核實(shí)施細(xì)則倉(cāng)庫(kù)人員績(jī)效考核內(nèi)容與評(píng)分標(biāo)準(zhǔn)
- 混凝土拌合物凝結(jié)時(shí)間自動(dòng)計(jì)算記錄
- 2022睡眠醫(yī)學(xué)中心建設(shè)指南
- 地磅允許誤差
- 《母雞》作業(yè)設(shè)計(jì)-統(tǒng)編版語(yǔ)文四年級(jí)下冊(cè)
- 鄉(xiāng)土中國(guó)第二課
- 【高中物理競(jìng)賽專題大全】競(jìng)賽專題1力學(xué)50題競(jìng)賽真題強(qiáng)化訓(xùn)練解析版
評(píng)論
0/150
提交評(píng)論