Linux編程環(huán)境.ppt_第1頁
Linux編程環(huán)境.ppt_第2頁
Linux編程環(huán)境.ppt_第3頁
Linux編程環(huán)境.ppt_第4頁
Linux編程環(huán)境.ppt_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論