版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、操作系統(tǒng)試驗(yàn)(2) Linux編程環(huán)境,2011-03,課程內(nèi)容,編輯器VI 編譯工具GCC 代碼調(diào)試工具GDB 項(xiàng)目管理工具M(jìn)ake,Linux開發(fā)環(huán)境,編輯器VI,visual interface,可視化編輯器 vi可以執(zhí)行輸出、刪除、查找、替換、塊操作等眾多文本操作,而且用戶可以根據(jù)自己的需要對其進(jìn)行定制. 只是一個(gè)文本編輯器,不能排版 vi沒有菜單,只有命令,命令模式,在該模式下可以通過移動(dòng)光標(biāo)進(jìn)行“刪除字符”、“字符串查找”,也可以完成“復(fù)制”,“粘貼”與“剪切”的操作,但無法編輯文字。 在shell下輸入“VI”或“VI 文件名”就進(jìn)入了命令模式。,1、移動(dòng)光標(biāo),移動(dòng)光標(biāo)h、j、k
2、、l:分別控制光標(biāo)左、下、上、右移一格。 :移動(dòng)到行首 ; $:移動(dòng)到行尾; Ctrl+b: 上滾一屏。 Ctrl+f: 下滾一屏。 Ctrl+d: 下滾半屏。 Ctrl+u: 上滾半屏。 G: 移到文件最后。nG:移動(dòng)第n行 w: 移到下個(gè)字的開頭。 b: 跳至上個(gè)字的開頭。,x: 刪除當(dāng)前光標(biāo)所在后面一個(gè)字符。 nx: 刪除當(dāng)前光標(biāo)所在后面n個(gè)字符。例如,5x表示刪除5個(gè)字符。 dd: 刪除當(dāng)前光標(biāo)所在行。 ndd:刪除當(dāng)前光標(biāo)所在后面n行。例如,5dd表示刪除自光標(biāo)算起的5行。 :n,md:刪除從n行到第M行的內(nèi)容 例如,:1,12d表示刪除自行1至行12的文字。 X: 刪當(dāng)前光標(biāo)的左字
3、符。 D: 刪至行尾。,2、刪除,3、復(fù)制,yw: 拷貝光標(biāo)處的字到字尾至緩沖區(qū)。 P: 把緩沖區(qū)的資料貼上來。 yy: 拷貝光標(biāo)所在之行至緩沖區(qū)。 nyy: 例如,5yy,拷貝光標(biāo)所在之處以下5行至緩沖區(qū)。,4. 復(fù)原,u: 復(fù)原至上一操作。,/word:由首至尾尋找“word”字符串,按n可往下繼續(xù)找。 ?word:由尾至首尋找“word”字符串,按N可往前繼續(xù)找。,5. 查找字符串,6.重復(fù)操作,.:重復(fù)上一次的操作,7.退出,ZZ:保存推出,末行命令方式,在編輯方式下輸入“ :”,就進(jìn)入末行模式 :w 存盤 :q 退出(在未做修改的情況下退出) :wq 存盤并退出 :q! 強(qiáng)行退出:w
4、q! 強(qiáng)行存盤退出:w file將編輯的內(nèi)容寫到 file 文件中去 :set nu: 顯示行號 :n,ms/old/new/g 將文件中第n行到m行內(nèi)的所有的old改成new,GCC編譯器,gcc是一個(gè)強(qiáng)大的工具集合,它包含了預(yù)處理器,編譯器,匯編器,鏈接器等組件。它會(huì)在需要的時(shí)候調(diào)用其他組件。輸入文件的類型和傳遞給gcc的參數(shù)決定了gcc調(diào)用具體的哪些組件。 對于開發(fā)者,它提供的足夠多的參數(shù),可以讓開發(fā)者全面控制代碼的生成,這對嵌入式系統(tǒng)級的軟件開發(fā)非常重要,GCC編譯器(cont.),GCC編譯流程 GCC的編譯流程分為4個(gè)步驟,分別為: (1)預(yù)處理(Pre-Processing);
5、在該階段,編譯器分析處理源代碼文件中的各種宏指令,如include,if等。 (2)編譯(Compiling); 在該階段,GCC首先要檢查代碼的規(guī)范性、是否有語法錯(cuò)誤等,在檢查無誤后,GCC把代碼翻譯為匯編語言。,GCC編譯器(cont.),(3)匯編(Assembling); 在該階段,編譯器把編譯生成的匯編代碼轉(zhuǎn)成二進(jìn)制目標(biāo)代碼。 (4)鏈接(Linking)。 在該階段,編譯器把匯編階段生成的二進(jìn)制代碼、程序中用到的庫文件鏈接起來,生成可執(zhí)行文件。 函數(shù)庫分為靜態(tài)庫和動(dòng)態(tài)庫。 靜態(tài)庫:在鏈接時(shí),靜態(tài)庫的文件代碼會(huì)被拷貝到可執(zhí)行文件中。 動(dòng)態(tài)庫:鏈接時(shí),動(dòng)態(tài)庫的代碼不會(huì)被加入可執(zhí)行文件中
6、,而是在程序被執(zhí)行的時(shí)候加載。,GCC編譯器(cont.),GCC的常用選項(xiàng) GCC的命令行格式:gcc options infile. 常用選項(xiàng): -c 編譯為目標(biāo)文件,不連接庫 -S 編譯為匯編代碼 -E 預(yù)處理.預(yù)處理之后的代碼將送往標(biāo)準(zhǔn)輸出 -Wwarn. 設(shè)置警告,可以設(shè)置的警告開關(guān)很多,通常用-Wall開啟所有的警告,GCC編譯器(cont.),-O level :設(shè)置優(yōu)化級別,level可以是0,1,2,3或者s,默認(rèn)為-O0,即不進(jìn)行優(yōu)化處理. -Dname=definition: 在命令行上定義宏,有兩種方式,-Dname或者-Dname=definition.在命令行上設(shè)置
7、宏定義的目的主要是為了在調(diào)試的時(shí)候設(shè)定一些開關(guān),而在發(fā)布的時(shí)候再關(guān)閉或者打開這些開關(guān)即可,當(dāng)然宏定義也用來對代碼進(jìn)行有選擇地編譯.另外也還有其他的一些作用.,GCC編譯器(cont.),-Uname 取消宏定義name,作用和上面的正好相反. -Idir. 把dir加到頭文件的搜索路徑中,而且gcc會(huì)在搜索標(biāo)準(zhǔn)頭文件之前先搜索dir. -llibrary 在連接的時(shí)候搜索library庫.庫是一些archieve文件-其成員是目標(biāo)文件.如果有文件引用library,library在命令行的位置應(yīng)該在那個(gè)文件之后,因此,越底層的庫越要放在后面.比如如果你要連接pcap庫,那么你就需要使用-lpc
8、ap對源文件進(jìn)行編譯. -Ldir. 把dir加到庫文件的搜索路徑中,而且gcc會(huì)在搜索標(biāo)準(zhǔn)庫文件之前先搜索dir.,GCC編譯器(cont.),-g 產(chǎn)生調(diào)試信息. GDB能夠使用這些調(diào)試信息。 -o outfile 指定輸出文件的文件名,默認(rèn)為a.out,GDB調(diào)試器,Gdb是一款GNU開發(fā)組織并發(fā)布的UNIX/Linux下的程序調(diào)試工具。它使你能在程序運(yùn)行時(shí)觀察程序的內(nèi)部結(jié)構(gòu)和內(nèi)存的使用情況. 以下是 gdb 所提供的一些功能: 它使你能監(jiān)視你程序中變量的值. 它使你能設(shè)置斷點(diǎn)以使程序在指定的代碼行上停止執(zhí)行. 它使你能一行行的執(zhí)行你的代碼.,GDB調(diào)試器(cont.),Gdb的使用方法
9、: Gdb option executable-filecore-file or process-id gdb命令. gdb命令分為12類,有上百條命令。,加載和退出命令,gdb filename:在shell下直接加載文件進(jìn)行調(diào)試 file filename:在gdb下通過file命令加載程序進(jìn)行調(diào)試 kill:終止正在調(diào)試的程序 quit:退出gdb調(diào)試環(huán)境,斷點(diǎn)控制,break 函數(shù)名 或 行號 if 條件 Info break :顯示程序中設(shè)置的斷點(diǎn); delete breakpoint 斷點(diǎn)號:刪除指定的斷點(diǎn) clear 斷點(diǎn)號:作用同上 disable breakpoint 斷點(diǎn)號
10、:禁用指定的斷點(diǎn) enable breakpoint 斷點(diǎn)號:允許指定的斷點(diǎn),程序的控制指令,run:程序開始執(zhí)行,一直運(yùn)行到斷點(diǎn)才終止; Continue:運(yùn)行到下一個(gè)斷點(diǎn); Next:運(yùn)行下一條指令; Step:運(yùn)行下一條指令;,變量、參數(shù)的設(shè)置與查看,list:列出產(chǎn)生執(zhí)行文件的源代碼的一部分. watch 變量名:當(dāng)變量改變時(shí),顯示變量修改前后的值; print 變量名:打印變量值; whatis 變量名或函數(shù)名:顯示變量或函數(shù)的類型; Ptype:顯示數(shù)據(jù)結(jié)構(gòu)的定義; set args:設(shè)置程序的運(yùn)行參數(shù); Show args:顯示程序的運(yùn)行參數(shù);,工程管理器 Make,Make 是
11、用于自動(dòng)編譯、鏈接程序的實(shí)用工具。在開發(fā)一個(gè)項(xiàng)目時(shí),通常是將項(xiàng)目分成許多功能模塊,每個(gè)功能模塊又可能被分成許多子模塊,而這些子模塊一般就是一個(gè)程序文件。小的項(xiàng)目通常都有十幾個(gè)或者幾十個(gè)文件,而大的項(xiàng)目則會(huì)有上百個(gè)甚至上千個(gè)文件。如果要一個(gè)一個(gè)的編譯每個(gè)文件,這個(gè)工作是非常繁瑣的,使用make 后就不需要手工的編譯每個(gè)程序文件。除了要寫一個(gè)makefile 文件外,通常所需要做的事情就是在命令行敲入“make”,然后所有的事情都由make 來完成。,工程管理器 Make(cont.),make的使用 usage:make options target 常見的選項(xiàng): -f FILE以指定的 FIL
12、E 文件作為 makefile。 -n只打印要執(zhí)行的命令,但不執(zhí)行這些命令。 -s在執(zhí)行命令時(shí)不顯示命令。,工程管理器 Make(cont.),makefile的宗旨就是讓編譯器知道要編譯一個(gè)文件需要依賴其他的哪些文件。當(dāng)那些依賴文件有了改變,編譯器會(huì)自動(dòng)的發(fā)現(xiàn)最終的生成文件已經(jīng)過時(shí),而重新編譯相應(yīng)的模塊。 默認(rèn)情況下,GNU make 工具在當(dāng)前工作目錄中按如下順序搜 makefile: GNUmakefile Makefile,工程管理器 Make(cont.),Makefile的基本結(jié)構(gòu) 一個(gè)簡單的Makefile文件包含一系列的“規(guī)則”,其樣式如下:目標(biāo)(target) : 依賴(pr
13、erequiries)命令(command) 目標(biāo)(target)通常是要產(chǎn)生的文件的名稱,目標(biāo)的例子是可執(zhí)行文件或OBJ文件。目標(biāo)也可是一個(gè)執(zhí)行的動(dòng)作名稱,這樣的目標(biāo)通常稱為偽目標(biāo)(PHONY)諸如clean 。依賴是用來輸入從而產(chǎn)生目標(biāo)的文件,一個(gè)目標(biāo)經(jīng)常有幾個(gè)依賴。,工程管理器 Make(cont.),命令是Make執(zhí)行的動(dòng)作,一個(gè)規(guī)則可以含有幾個(gè)命令,每個(gè)命令占一行。 注意:每個(gè)命令行前面必須是一個(gè)Tab字符,即命令行第一個(gè)字符是Tab。這是不小心容易出錯(cuò)的地方。,工程管理器 Make(cont.),試驗(yàn)一:,)使用VI編輯器,將以下代碼輸入到名為greet.c的文件中,使用GCC編譯
14、該程序并執(zhí)行程序; )此代碼的愿意為將main函數(shù)中定義的字符串倒序輸出,執(zhí)行后,發(fā)現(xiàn)結(jié)果顯示沒有輸出,使用分析程序錯(cuò)誤的原因,并修改程序,以達(dá)到程序預(yù)先的目的,#include int display1(char * string); int display2(char * string); int main() char string=“informaiton security”; display1(string); display2(string); int display1(char* string) printf(“the orginal string is %sn”,string); ,int display2(char * string1) char * string2; int size,i; size = strlen(string1); string2 =(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 射頻同軸電纜相關(guān)行業(yè)投資方案范本
- 垃圾焚燒發(fā)電設(shè)備相關(guān)行業(yè)投資規(guī)劃報(bào)告
- 金融機(jī)構(gòu)安全風(fēng)險(xiǎn)防范措施回顧計(jì)劃
- 2024-2025學(xué)年上學(xué)期七年級期末模擬試卷-考點(diǎn)大串講(2024冀教版)(原卷版)-A4
- 教師培訓(xùn)課件:“生命語文”教學(xué)研究
- 《解譯與分析》課件
- 《改革贏得未來》課件
- 創(chuàng)編童話故事課件
- 《認(rèn)識實(shí)習(xí)建材》課件
- 《信息的收集和傳遞》課件
- 憲法學(xué)完整版教學(xué)課件全套ppt教程
- 西師大版六年級數(shù)學(xué)上冊《比和按比例分配的整理與復(fù)習(xí)》課件
- 房屋租賃合同終止協(xié)議書格式(3篇)
- PPT成功的秘訣——勤奮
- 建設(shè)工程監(jiān)理概論(PPT)
- 土地整治業(yè)務(wù)培訓(xùn)
- 澳大利亞教育質(zhì)量保障框架ppt課件
- 供應(yīng)鏈環(huán)境下新寶公司庫存管理優(yōu)化
- 熱力學(xué)第四章熱力學(xué)第二定律(me)(1)
- 公園綠化養(yǎng)護(hù)景觀綠化維護(hù)項(xiàng)目迎接重大節(jié)會(huì)活動(dòng)的保障措施
- 調(diào)機(jī)品管理作業(yè)規(guī)范
評論
0/150
提交評論