




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、課程目標(biāo)課程目標(biāo):本課程將嵌入式系統(tǒng)中經(jīng)常用到的本課程將嵌入式系統(tǒng)中經(jīng)常用到的C C編編程技巧與概念介紹給大家,并且能在程技巧與概念介紹給大家,并且能在Linux下使用下使用C語(yǔ)言編寫(xiě)一些實(shí)際的應(yīng)用程序語(yǔ)言編寫(xiě)一些實(shí)際的應(yīng)用程序先修課程:先修課程:C C語(yǔ)言編程(我們假設(shè)同學(xué)門(mén)已經(jīng)了解語(yǔ)言編程(我們假設(shè)同學(xué)門(mén)已經(jīng)了解基本的基本的C C語(yǔ)法,并至少在一個(gè)編譯器環(huán)境中編寫(xiě)過(guò)語(yǔ)法,并至少在一個(gè)編譯器環(huán)境中編寫(xiě)過(guò)C C語(yǔ)言,雖然我們?cè)谡n程中有語(yǔ)言,雖然我們?cè)谡n程中有4 4個(gè)小時(shí)左右的個(gè)小時(shí)左右的C C語(yǔ)言復(fù)語(yǔ)言復(fù)習(xí))習(xí))學(xué)時(shí)分配:學(xué)時(shí)分配:總學(xué)時(shí)總學(xué)時(shí)4848小時(shí),小時(shí),其中授課其中授課2424小時(shí),
2、實(shí)驗(yàn)(小時(shí),實(shí)驗(yàn)(ProjectProject)2424小時(shí)小時(shí) 要求學(xué)生獨(dú)立完成一個(gè)中等規(guī)模的要求學(xué)生獨(dú)立完成一個(gè)中等規(guī)模的C C語(yǔ)言項(xiàng)目。語(yǔ)言項(xiàng)目。 (1)C C程式設(shè)計(jì)語(yǔ)言程式設(shè)計(jì)語(yǔ)言 (The C Programming Language )(The C Programming Language ) 作者:作者:Brian W.Kernighan, Dennis M.RitchieBrian W.Kernighan, Dennis M.Ritchie 簡(jiǎn)介:本書(shū)是由簡(jiǎn)介:本書(shū)是由C C語(yǔ)言的設(shè)計(jì)者語(yǔ)言的設(shè)計(jì)者Brian W. KernighanBrian W. Kernighan和和D
3、ennis M. Dennis M. RitchieRitchie編寫(xiě)的一部介紹標(biāo)準(zhǔn)編寫(xiě)的一部介紹標(biāo)準(zhǔn)C C語(yǔ)言及其程式設(shè)計(jì)方法的權(quán)威性經(jīng)典著作。一語(yǔ)言及其程式設(shè)計(jì)方法的權(quán)威性經(jīng)典著作。一本必讀的程式設(shè)計(jì)語(yǔ)言方面的參考書(shū)。本必讀的程式設(shè)計(jì)語(yǔ)言方面的參考書(shū)。 (2)C Primer PlusC Primer Plus中文版中文版(C Primer Plus)(C Primer Plus) 作者:作者:Stephen PrataStephen Prata 簡(jiǎn)介:作為核心計(jì)算機(jī)技術(shù)成熟、完整的參考書(shū)籍,簡(jiǎn)介:作為核心計(jì)算機(jī)技術(shù)成熟、完整的參考書(shū)籍,Primer PlusPrimer Plus系列系列
4、歷經(jīng)十?dāng)?shù)年不衰,通過(guò)學(xué)習(xí)歷經(jīng)十?dāng)?shù)年不衰,通過(guò)學(xué)習(xí)C Primer Plus(C Primer Plus(第五版第五版) )中文版中文版,你將奠定,你將奠定堅(jiān)實(shí)的堅(jiān)實(shí)的C C編程基礎(chǔ)。編程基礎(chǔ)。 (3)C C和指針和指針(Pointers on C)(Pointers on C) 作者:作者:Kenneth A.ReekKenneth A.Reek 簡(jiǎn)介:本書(shū)提供和簡(jiǎn)介:本書(shū)提供和C C語(yǔ)言編程相關(guān)的全方面資源和深入討論。全書(shū)覆蓋語(yǔ)言編程相關(guān)的全方面資源和深入討論。全書(shū)覆蓋了數(shù)據(jù)、語(yǔ)句、操作符和表達(dá)式、指針、函數(shù)、數(shù)組、字符串、結(jié)構(gòu)和聯(lián)合了數(shù)據(jù)、語(yǔ)句、操作符和表達(dá)式、指針、函數(shù)、數(shù)組、字符串、結(jié)
5、構(gòu)和聯(lián)合等幾乎所有重要的等幾乎所有重要的C C編程話題。書(shū)中給出了非常多編程技巧和提示。編程話題。書(shū)中給出了非常多編程技巧和提示。參考書(shū)籍和資料參考書(shū)籍和資料- C語(yǔ)言語(yǔ)言初級(jí)初級(jí)教材教材 (1)C C陷阱和缺陷陷阱和缺陷(C Traps and Pitfalls)(C Traps and Pitfalls) 作者:作者:Andrew Koenig Andrew Koenig 簡(jiǎn)介:作者以自己簡(jiǎn)介:作者以自己19851985年在年在BellBell實(shí)驗(yàn)室時(shí)發(fā)表的一篇論文為基礎(chǔ),結(jié)實(shí)驗(yàn)室時(shí)發(fā)表的一篇論文為基礎(chǔ),結(jié)合自己的工作經(jīng)驗(yàn)擴(kuò)展成為這本對(duì)合自己的工作經(jīng)驗(yàn)擴(kuò)展成為這本對(duì)C C程式員具有珍貴價(jià)值
6、的經(jīng)典著作。本書(shū)程式員具有珍貴價(jià)值的經(jīng)典著作。本書(shū)的出發(fā)點(diǎn)不是要批判的出發(fā)點(diǎn)不是要批判C C語(yǔ)言,而是要幫助語(yǔ)言,而是要幫助C C程式員繞過(guò)編程過(guò)程中的陷阱和程式員繞過(guò)編程過(guò)程中的陷阱和障礙。障礙。 (2)C C專(zhuān)家編程專(zhuān)家編程(Expert C Programming )(Expert C Programming ) 作者:作者:Perter Van Der LinDenPerter Van Der LinDen 簡(jiǎn)介:展示了最優(yōu)秀的簡(jiǎn)介:展示了最優(yōu)秀的C C程式員所使用的編碼技巧。程式員所使用的編碼技巧。 書(shū)中書(shū)中C C的歷史、語(yǔ)的歷史、語(yǔ)言特性、聲明、數(shù)組、指針、鏈接、運(yùn)行時(shí)、內(nèi)存及怎么
7、進(jìn)一步學(xué)習(xí)言特性、聲明、數(shù)組、指針、鏈接、運(yùn)行時(shí)、內(nèi)存及怎么進(jìn)一步學(xué)習(xí)C+C+等等問(wèn)題進(jìn)行了細(xì)致的講解和深入的分析。全書(shū)擷取幾十個(gè)實(shí)例進(jìn)行講解,對(duì)問(wèn)題進(jìn)行了細(xì)致的講解和深入的分析。全書(shū)擷取幾十個(gè)實(shí)例進(jìn)行講解,對(duì)C C程式員具有非常高的實(shí)用價(jià)值程式員具有非常高的實(shí)用價(jià)值。 (3)C C語(yǔ)言編程常見(jiàn)問(wèn)題解答語(yǔ)言編程常見(jiàn)問(wèn)題解答(C Programming : Just the Faqs(C Programming : Just the Faqs ) ) 作者:作者:Paul S.R.ChisholmPaul S.R.Chisholm 等等 簡(jiǎn)介:這是一本專(zhuān)門(mén)解答簡(jiǎn)介:這是一本專(zhuān)門(mén)解答c c語(yǔ)言編程
8、常見(jiàn)問(wèn)題的著作。書(shū)中所覆蓋的內(nèi)語(yǔ)言編程常見(jiàn)問(wèn)題的著作。書(shū)中所覆蓋的內(nèi)容相當(dāng)廣泛,并附有大量鮮明的例子容相當(dāng)廣泛,并附有大量鮮明的例子。參考書(shū)籍和資料參考書(shū)籍和資料- C語(yǔ)言語(yǔ)言進(jìn)階進(jìn)階書(shū)籍書(shū)籍 (1)(1) C/C+C/C+嵌入式系統(tǒng)編程嵌入式系統(tǒng)編程(Programming Embedded Systems in C (Programming Embedded Systems in C and C+)and C+) 作者:作者:Michael Barr Michael Barr 簡(jiǎn)介:本書(shū)中的技術(shù)和范例代碼均可直接應(yīng)用于各種實(shí)際的嵌入式系統(tǒng)簡(jiǎn)介:本書(shū)中的技術(shù)和范例代碼均可直接應(yīng)用于各種實(shí)際的
9、嵌入式系統(tǒng)項(xiàng)目。有過(guò)嵌入式系統(tǒng)研發(fā)經(jīng)驗(yàn)的讀者,也將從中獲益匪淺。項(xiàng)目。有過(guò)嵌入式系統(tǒng)研發(fā)經(jīng)驗(yàn)的讀者,也將從中獲益匪淺。 (2) (2) 嵌入式實(shí)時(shí)操作系統(tǒng)嵌入式實(shí)時(shí)操作系統(tǒng)C/OS-IIC/OS-II(MicroC/OS-II(MicroC/OS-II The Real-Time The Real-Time Kernel)Kernel) 作者:作者:Jean J.LabrosseJean J.Labrosse 簡(jiǎn)介:簡(jiǎn)介:CC/OSII/OSII是源碼公開(kāi)的實(shí)時(shí)內(nèi)核,是專(zhuān)為嵌入式應(yīng)用設(shè)計(jì)的。通是源碼公開(kāi)的實(shí)時(shí)內(nèi)核,是專(zhuān)為嵌入式應(yīng)用設(shè)計(jì)的。通過(guò)對(duì)過(guò)對(duì)CC/OSII/OSII原始碼的分析和描述,講
10、述了多任務(wù)實(shí)時(shí)的基本概念、競(jìng)爭(zhēng)和原始碼的分析和描述,講述了多任務(wù)實(shí)時(shí)的基本概念、競(jìng)爭(zhēng)和調(diào)度算法、任務(wù)間同步和通信、存儲(chǔ)和定時(shí)的管理及怎么處理優(yōu)先級(jí)反轉(zhuǎn)問(wèn)調(diào)度算法、任務(wù)間同步和通信、存儲(chǔ)和定時(shí)的管理及怎么處理優(yōu)先級(jí)反轉(zhuǎn)問(wèn)題;介紹怎么將題;介紹怎么將CC/OSII/OSII移植到不同移植到不同CPUCPU上,怎么調(diào)試移植代碼。上,怎么調(diào)試移植代碼。 (3) (3) 嵌入式系統(tǒng)構(gòu)件嵌入式系統(tǒng)構(gòu)件(Embedded Systems Building Blocks )(Embedded Systems Building Blocks ) 作者:作者: Jean J.LabrosseJean J.Labr
11、osse 簡(jiǎn)介:本書(shū)介紹了構(gòu)建嵌入式系統(tǒng)的一些通用模塊,如鍵盤(pán)掃描器、顯簡(jiǎn)介:本書(shū)介紹了構(gòu)建嵌入式系統(tǒng)的一些通用模塊,如鍵盤(pán)掃描器、顯示器接口、計(jì)量器和輸入示器接口、計(jì)量器和輸入/ /輸出。大部分代碼都是用可移植的輸出。大部分代碼都是用可移植的C C語(yǔ)言編寫(xiě)。語(yǔ)言編寫(xiě)。參考書(shū)籍和資料參考書(shū)籍和資料-嵌入式編程書(shū)籍嵌入式編程書(shū)籍1. 1. 會(huì)會(huì)C C語(yǔ)法與會(huì)用語(yǔ)法與會(huì)用C C語(yǔ)言寫(xiě)程序是兩個(gè)概念語(yǔ)言寫(xiě)程序是兩個(gè)概念2. C2. C的靈活性以及由此而產(chǎn)生的陷阱非常非常多的靈活性以及由此而產(chǎn)生的陷阱非常非常多3. The Most Beautiful Language and Most 3. The
12、 Most Beautiful Language and Most Dangerous Language in the Programming World!Dangerous Language in the Programming World!學(xué)習(xí)學(xué)習(xí)C C語(yǔ)言的誤區(qū)語(yǔ)言的誤區(qū)第第1章章 嵌入式嵌入式Linux C語(yǔ)言開(kāi)發(fā)工具語(yǔ)言開(kāi)發(fā)工具本章內(nèi)容本章內(nèi)容1.1 嵌入式嵌入式Linux下下C語(yǔ)言概述語(yǔ)言概述1.2 嵌入式嵌入式Linux編輯器編輯器vi的使用的使用1.3 嵌入式嵌入式Linux編譯器編譯器GCC的使用的使用 1.4 嵌入式嵌入式Linux調(diào)試器調(diào)試器GDB的使用的使用 1.5 m
13、ake工程管理器工程管理器 1.6 Eclipse集成開(kāi)發(fā)環(huán)境集成開(kāi)發(fā)環(huán)境 本章小結(jié)本章小結(jié)1.1 嵌入式嵌入式Linux下下C語(yǔ)言概述語(yǔ)言概述 1.1.1 C語(yǔ)言簡(jiǎn)史語(yǔ)言簡(jiǎn)史 1.1.2 C語(yǔ)言特點(diǎn)語(yǔ)言特點(diǎn) 1.1.3 嵌入式嵌入式Linux C語(yǔ)言編程環(huán)境語(yǔ)言編程環(huán)境 1.1.1 C語(yǔ)言簡(jiǎn)史語(yǔ)言簡(jiǎn)史 C語(yǔ)言語(yǔ)言最初最初是美國(guó)貝爾實(shí)驗(yàn)室的是美國(guó)貝爾實(shí)驗(yàn)室的D.M.Ritchie在在B語(yǔ)言的基礎(chǔ)上設(shè)計(jì)出來(lái)語(yǔ)言的基礎(chǔ)上設(shè)計(jì)出來(lái)的,此時(shí)的的,此時(shí)的C語(yǔ)言只是為了描述和實(shí)現(xiàn)語(yǔ)言只是為了描述和實(shí)現(xiàn)UNIX操作系統(tǒng)的一種工作語(yǔ)言。在操作系統(tǒng)的一種工作語(yǔ)言。在一段時(shí)間里,一段時(shí)間里,C語(yǔ)言還只在貝爾實(shí)驗(yàn)室
14、內(nèi)部使用。語(yǔ)言還只在貝爾實(shí)驗(yàn)室內(nèi)部使用。1975年年,UNIX第第6版公布后,版公布后,C語(yǔ)言突出的優(yōu)點(diǎn)引起人們的普遍注意。語(yǔ)言突出的優(yōu)點(diǎn)引起人們的普遍注意。1977年年出現(xiàn)了可移植的出現(xiàn)了可移植的C語(yǔ)言。語(yǔ)言。1978年年UNIX第第7版的版的C語(yǔ)言成為后來(lái)被廣泛使用的語(yǔ)言成為后來(lái)被廣泛使用的C語(yǔ)言版本的基礎(chǔ),被語(yǔ)言版本的基礎(chǔ),被稱(chēng)為標(biāo)準(zhǔn)稱(chēng)為標(biāo)準(zhǔn)C語(yǔ)言。語(yǔ)言。1983年年,美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)(,美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)(ANSI)根據(jù))根據(jù)C語(yǔ)言問(wèn)世以來(lái)的各種版本,語(yǔ)言問(wèn)世以來(lái)的各種版本,對(duì)對(duì)C語(yǔ)言進(jìn)行發(fā)展和擴(kuò)充,并制定了新的標(biāo)準(zhǔn),稱(chēng)為語(yǔ)言進(jìn)行發(fā)展和擴(kuò)充,并制定了新的標(biāo)準(zhǔn),稱(chēng)為ANSI C。199
15、0年年,國(guó)際標(biāo)準(zhǔn)化組織,國(guó)際標(biāo)準(zhǔn)化組織ISO制定了制定了ISO C標(biāo)準(zhǔn),目前流行的標(biāo)準(zhǔn),目前流行的C語(yǔ)言編譯系語(yǔ)言編譯系統(tǒng)都是以它為標(biāo)準(zhǔn)的。統(tǒng)都是以它為標(biāo)準(zhǔn)的。1.1.2 C語(yǔ)言特點(diǎn)語(yǔ)言特點(diǎn)C語(yǔ)言是結(jié)構(gòu)化的語(yǔ)言語(yǔ)言是結(jié)構(gòu)化的語(yǔ)言 采用代碼及數(shù)據(jù)分隔的方式,使程序的各部分獨(dú)立采用代碼及數(shù)據(jù)分隔的方式,使程序的各部分獨(dú)立以函數(shù)的形式提供給用戶,方便調(diào)用以函數(shù)的形式提供給用戶,方便調(diào)用C語(yǔ)言是模塊化的語(yǔ)言語(yǔ)言是模塊化的語(yǔ)言 減少重復(fù)編程,減少勞動(dòng)量,提高編程效率減少重復(fù)編程,減少勞動(dòng)量,提高編程效率程序可移植性好程序可移植性好 不同機(jī)器上的編譯程序大約有不同機(jī)器上的編譯程序大約有80%的代碼是公共的
16、的代碼是公共的 C語(yǔ)言運(yùn)算符豐富、代碼效率高語(yǔ)言運(yùn)算符豐富、代碼效率高C語(yǔ)言共有語(yǔ)言共有34種運(yùn)算符,使用各種運(yùn)算符可以實(shí)現(xiàn)在其他高級(jí)語(yǔ)言中種運(yùn)算符,使用各種運(yùn)算符可以實(shí)現(xiàn)在其他高級(jí)語(yǔ)言中難以實(shí)現(xiàn)的運(yùn)算。難以實(shí)現(xiàn)的運(yùn)算。 1.1.3 嵌入式嵌入式Linux C語(yǔ)言編程環(huán)境語(yǔ)言編程環(huán)境 編輯器編輯器 常用的編輯器有常用的編輯器有vi(vim)和)和Emacs 編譯鏈接器編譯鏈接器 常用的編譯器是常用的編譯器是GCC編譯器編譯器 調(diào)試器調(diào)試器 GDB 項(xiàng)目管理器項(xiàng)目管理器 項(xiàng)目管理器項(xiàng)目管理器make1.2 嵌入式嵌入式Linux編輯器編輯器vi的使用的使用 1.2.1 vi的基本模式的基本模式
17、1.2.2 vi的基本操作的基本操作 1.2.3 vi的使用實(shí)例分析的使用實(shí)例分析1.2.1 vi (vim)的基本模式的基本模式 命令行模式(命令行模式(Command Mode) 在該模式下用戶可以輸入命令來(lái)控制屏幕光標(biāo)的移動(dòng),在該模式下用戶可以輸入命令來(lái)控制屏幕光標(biāo)的移動(dòng),字符、單詞或行的刪除,移動(dòng)復(fù)制某區(qū)段,也可以進(jìn)入字符、單詞或行的刪除,移動(dòng)復(fù)制某區(qū)段,也可以進(jìn)入到底行模式或者插入模式下。到底行模式或者插入模式下。 插入模式(插入模式(Insert Mode) 用戶只有在插入模式下才可以進(jìn)行字符輸入,用戶按用戶只有在插入模式下才可以進(jìn)行字符輸入,用戶按Esc鍵可回到命令行模式下。鍵可
18、回到命令行模式下。 底行模式(底行模式(Last Line Mode) 在該模式下,用戶可以將文件保存或退出在該模式下,用戶可以將文件保存或退出vi,也可以設(shè),也可以設(shè)置編輯環(huán)境,如尋找字符串、顯示行號(hào)等。這一模式下置編輯環(huán)境,如尋找字符串、顯示行號(hào)等。這一模式下的命令都是以的命令都是以“:”開(kāi)始。開(kāi)始。 1.2.2 vi (vim)的基本操作的基本操作 進(jìn)入與離開(kāi)進(jìn)入與離開(kāi) 進(jìn)入進(jìn)入vi可以直接在系統(tǒng)提示符下鍵入可以直接在系統(tǒng)提示符下鍵入vi 文檔名稱(chēng),文檔名稱(chēng),vi可以自動(dòng)載入所要編輯的文檔或是創(chuàng)建一個(gè)新的文檔??梢宰詣?dòng)載入所要編輯的文檔或是創(chuàng)建一個(gè)新的文檔。如在如在shell中鍵入中鍵入
19、vi hello.c(新建文檔)即可進(jìn)入(新建文檔)即可進(jìn)入vi畫(huà)面畫(huà)面. 進(jìn)入進(jìn)入vi后屏幕最左邊會(huì)出現(xiàn)波浪符號(hào),凡是有該符號(hào)就后屏幕最左邊會(huì)出現(xiàn)波浪符號(hào),凡是有該符號(hào)就代表該行目前是空的。此時(shí)進(jìn)入的是命令行模式。代表該行目前是空的。此時(shí)進(jìn)入的是命令行模式。 要離開(kāi)要離開(kāi)vi可以在底行模式下鍵入可以在底行模式下鍵入“:q”(不保存離開(kāi)),(不保存離開(kāi)),“:wq”(保存離開(kāi))則是存檔后再離開(kāi)(注意冒號(hào))。(保存離開(kāi))則是存檔后再離開(kāi)(注意冒號(hào))。 在vi中打開(kāi)/新建文檔171.2.2 vi (vim)的基本操作的基本操作 在vi中退出文檔 1.2.2 vi (vim)的基本操作的基本操作 v
20、i中中3種模式的切換種模式的切換 (1)命令行模式、底行模式轉(zhuǎn)為插入模式)命令行模式、底行模式轉(zhuǎn)為插入模式特特 征征命令命令作作 用用新增新增a從光標(biāo)所在位置后面開(kāi)始新增資料,光標(biāo)后的從光標(biāo)所在位置后面開(kāi)始新增資料,光標(biāo)后的資料隨新增資料向后移動(dòng)資料隨新增資料向后移動(dòng)A從光標(biāo)所在列最后面的地方開(kāi)始新增資料從光標(biāo)所在列最后面的地方開(kāi)始新增資料插入插入i從光標(biāo)所在位置前面開(kāi)始插入資料,游標(biāo)后的從光標(biāo)所在位置前面開(kāi)始插入資料,游標(biāo)后的資料隨新增資料向后移動(dòng)資料隨新增資料向后移動(dòng)I從光標(biāo)所在列的第一個(gè)非空白字元前面開(kāi)始插從光標(biāo)所在列的第一個(gè)非空白字元前面開(kāi)始插入資料入資料開(kāi)始開(kāi)始o(jì)在光標(biāo)所在列下方新增
21、一列,并進(jìn)入插入模式在光標(biāo)所在列下方新增一列,并進(jìn)入插入模式O在光標(biāo)所在列上方新增一列,并進(jìn)入插入模式在光標(biāo)所在列上方新增一列,并進(jìn)入插入模式 vi中中3種模式的切換種模式的切換 (續(xù))(續(xù)) (2)插入模式轉(zhuǎn)為命令行模式、底行模式)插入模式轉(zhuǎn)為命令行模式、底行模式從插入模式轉(zhuǎn)為命令行模式、底行模式從插入模式轉(zhuǎn)為命令行模式、底行模式比較簡(jiǎn)單,只需使用比較簡(jiǎn)單,只需使用Esc鍵即可。鍵即可。 (3)命令行模式與底行模式轉(zhuǎn)換)命令行模式與底行模式轉(zhuǎn)換命令行模式與底行模式間的轉(zhuǎn)換不需要命令行模式與底行模式間的轉(zhuǎn)換不需要其他特別的命令,而只需要直接鍵入相應(yīng)模其他特別的命令,而只需要直接鍵入相應(yīng)模式中的
22、命令鍵即可。式中的命令鍵即可。1.2.2 vi (vim)的基本操作的基本操作 vi的刪除、修改與復(fù)制的刪除、修改與復(fù)制 特特 征征ARM作作 用用刪除刪除x x刪除光標(biāo)所在的字符刪除光標(biāo)所在的字符dddd刪除光標(biāo)所在的行刪除光標(biāo)所在的行s s刪除光標(biāo)所在的字符,并進(jìn)入輸入模式刪除光標(biāo)所在的字符,并進(jìn)入輸入模式S S刪除光標(biāo)所在的行,并進(jìn)入輸入模式刪除光標(biāo)所在的行,并進(jìn)入輸入模式修改修改r r 待修改字待修改字符符修改光標(biāo)所在的字符,鍵入修改光標(biāo)所在的字符,鍵入r后直接鍵入待修改后直接鍵入待修改字符字符R R進(jìn)入取代狀態(tài),可移動(dòng)光標(biāo)鍵入所指位置的修改進(jìn)入取代狀態(tài),可移動(dòng)光標(biāo)鍵入所指位置的修改字
23、符,該取代狀態(tài)直到按字符,該取代狀態(tài)直到按Esc才結(jié)束才結(jié)束復(fù)制復(fù)制yyyy復(fù)制光標(biāo)所在的行復(fù)制光標(biāo)所在的行nyynyy復(fù)制光標(biāo)所在的行向下復(fù)制光標(biāo)所在的行向下n行行p p將緩沖區(qū)內(nèi)的字符粘貼到光標(biāo)所在位置將緩沖區(qū)內(nèi)的字符粘貼到光標(biāo)所在位置1.2.2 vi (vim)的基本操作的基本操作 vi的光標(biāo)移動(dòng)的光標(biāo)移動(dòng) 指指 令令作作 用用0移動(dòng)到光標(biāo)所在行的最前面移動(dòng)到光標(biāo)所在行的最前面$移動(dòng)到光標(biāo)所在行的最后面移動(dòng)到光標(biāo)所在行的最后面Ctrld光標(biāo)向下移動(dòng)半頁(yè)光標(biāo)向下移動(dòng)半頁(yè)Ctrlf光標(biāo)向下移動(dòng)一頁(yè)光標(biāo)向下移動(dòng)一頁(yè)H光標(biāo)移動(dòng)到當(dāng)前屏幕的第一行第一列光標(biāo)移動(dòng)到當(dāng)前屏幕的第一行第一列M光標(biāo)移動(dòng)到當(dāng)
24、前屏幕的中間行第一列光標(biāo)移動(dòng)到當(dāng)前屏幕的中間行第一列L光標(biāo)移動(dòng)到當(dāng)前屏幕的最后行第一列光標(biāo)移動(dòng)到當(dāng)前屏幕的最后行第一列b移動(dòng)到上一個(gè)字的第一個(gè)字母移動(dòng)到上一個(gè)字的第一個(gè)字母w移動(dòng)到下一個(gè)字的第一個(gè)字母移動(dòng)到下一個(gè)字的第一個(gè)字母e移動(dòng)到下一個(gè)字的最后一個(gè)字母移動(dòng)到下一個(gè)字的最后一個(gè)字母移動(dòng)到光標(biāo)所在行的第一個(gè)非空白字符移動(dòng)到光標(biāo)所在行的第一個(gè)非空白字符n-向上移動(dòng)向上移動(dòng)n行行n+向下移動(dòng)向下移動(dòng)n行行nG移動(dòng)到第移動(dòng)到第n行行1.2.2 vi (vim)的基本操作的基本操作 vi的查找與替換的查找與替換 特特 征征ARM作作 用用查找查找/向下查找要查找的字符向下查找要查找的字符?向上查找要查
25、找的字符向上查找要查找的字符替換替換:0,$s/string1/string2/g0,$:替換范圍從第:替換范圍從第0行到最后行到最后一行一行s:轉(zhuǎn)入替換模式:轉(zhuǎn)入替換模式string1/string2:把所有把所有string1替換為替換為string2g:強(qiáng)制替換而不提示:強(qiáng)制替換而不提示1.2.2 vi (vim)的基本操作的基本操作 vi的文件操作指令的文件操作指令 指指 令令作作 用用:q結(jié)束編輯,退出結(jié)束編輯,退出vi:q!不保存編輯過(guò)的文檔不保存編輯過(guò)的文檔:w保存文檔,其后可加要保存的文件名保存文檔,其后可加要保存的文件名:wq保存文檔并退出保存文檔并退出:zz功能與功能與“:
26、wq”相同相同:x功能與功能與“:wq”相同相同1.2.2 vi (vim)的基本操作的基本操作1.2.3 vi (vim)的使用實(shí)例分析的使用實(shí)例分析 vi使用實(shí)例內(nèi)容使用實(shí)例內(nèi)容 (1)在)在/root目錄下建一個(gè)名為目錄下建一個(gè)名為vi的目錄。的目錄。(2)進(jìn)入)進(jìn)入vi目錄。目錄。(3)將文件)將文件/etc/inittab復(fù)制到當(dāng)前目錄復(fù)制到當(dāng)前目錄下。下。(4)使用)使用vi編輯當(dāng)前目錄下的編輯當(dāng)前目錄下的inittab。(5)將光標(biāo)移到該行。)將光標(biāo)移到該行。(6)復(fù)制該行內(nèi)容。)復(fù)制該行內(nèi)容。(7)將光標(biāo)移到最后一行行首。)將光標(biāo)移到最后一行行首。(8)粘貼復(fù)制行的內(nèi)容。)粘貼
27、復(fù)制行的內(nèi)容。(9)撤銷(xiāo)第)撤銷(xiāo)第9步的動(dòng)作。步的動(dòng)作。(10)將光標(biāo)移動(dòng)到最后一行的行尾。)將光標(biāo)移動(dòng)到最后一行的行尾。(11)粘貼復(fù)制行的內(nèi)容。)粘貼復(fù)制行的內(nèi)容。(12)光標(biāo)移到)光標(biāo)移到“si:sysinit:/etc/rc.d/rc.sysinit”。(13)刪除該行。)刪除該行。(14)存盤(pán)但不退出。)存盤(pán)但不退出。(15)將光標(biāo)移到首行。)將光標(biāo)移到首行。(16)插入模式下輸入)插入模式下輸入“Hello,this is vi world!”。(17)返回命令行模式。)返回命令行模式。(18)向下查找字符串)向下查找字符串“0:wait”。(19)再向上查找字符串)再向上查找字符
28、串“halt”。(20)強(qiáng)制退出)強(qiáng)制退出vi,不存盤(pán)。,不存盤(pán)。 vi使用實(shí)例解析使用實(shí)例解析(1)mkdir /root/vi(2)cd /root/vi(3)cp /etc/inittab ./(4)vi ./inittab(5)17(命令行模式)(命令行模式)(6)yy(7)G(8)p(9)u(10)$(11)P(12)21G(13)dd(14):w(底行模式)(底行模式)(15)1G(16)i 并輸入并輸入“Hello,this is vi world!”(插入模式)(插入模式)(17)Esc(18)/0:wait(命令行(命令行模式)模式)(19)?halt(20):q!(底行模式
29、)(底行模式)1.2.3 vi (vim)的使用實(shí)例分析的使用實(shí)例分析1.3嵌入式嵌入式Linux編譯器編譯器GCC的使用的使用 1.3.1 GCC概述概述 1.3.2 GCC編譯流程分析編譯流程分析 1.3.3 GCC警告提示警告提示 1.3.4 GCC使用庫(kù)函數(shù)使用庫(kù)函數(shù) 1.3.5 GCC代碼優(yōu)化代碼優(yōu)化1.3.1 GCC概述概述 GCC除了能支持除了能支持C語(yǔ)言外,語(yǔ)言外,目前還支持目前還支持Ada語(yǔ)言、語(yǔ)言、C+語(yǔ)言、語(yǔ)言、Java語(yǔ)言、語(yǔ)言、Objective C語(yǔ)言、語(yǔ)言、PASCAL語(yǔ)言、語(yǔ)言、COBOL語(yǔ)言,以及支語(yǔ)言,以及支持函數(shù)式編程和邏輯編程的持函數(shù)式編程和邏輯編程的M
30、ercury語(yǔ)言等語(yǔ)言等 GCC的編譯流程分為了的編譯流程分為了4個(gè)個(gè)步驟,分別為步驟,分別為 預(yù)處理(預(yù)處理(Pre-Processing) 編譯(編譯(Compiling) 匯編(匯編(Assembling) 鏈接(鏈接(Linking)后綴名后綴名所對(duì)應(yīng)的語(yǔ)言所對(duì)應(yīng)的語(yǔ)言編編 譯譯 流流 程程.cC原始程序原始程序預(yù)處理、編譯、預(yù)處理、編譯、匯編匯編.C .cc.cxxC+原始程序原始程序預(yù)處理、編譯、預(yù)處理、編譯、匯編匯編.mObjective-C原始原始程序程序預(yù)處理、編譯、預(yù)處理、編譯、匯編匯編.i已經(jīng)過(guò)預(yù)處理的已經(jīng)過(guò)預(yù)處理的C原始程序原始程序編譯、匯編編譯、匯編.ii已經(jīng)過(guò)預(yù)處理
31、的已經(jīng)過(guò)預(yù)處理的C+原始程序原始程序編譯、匯編編譯、匯編.s .S匯編語(yǔ)言原始程序匯編語(yǔ)言原始程序匯編匯編.h預(yù)處理文件(頭文預(yù)處理文件(頭文件)件)(不常出現(xiàn)在指(不常出現(xiàn)在指令行)令行).o目標(biāo)文件目標(biāo)文件鏈接鏈接.a/.so編譯后的庫(kù)文件編譯后的庫(kù)文件鏈接鏈接1.3.2 GCC編譯流程分析編譯流程分析 GCC使用的基本語(yǔ)法為:使用的基本語(yǔ)法為: gcc option | filename 預(yù)處理階段預(yù)處理階段 gcc E o 目標(biāo)文件目標(biāo)文件 編譯文件編譯文件 選項(xiàng)選項(xiàng)“-E”可以使編譯器在預(yù)處理結(jié)束時(shí)就停止編譯可以使編譯器在預(yù)處理結(jié)束時(shí)就停止編譯 選項(xiàng)選項(xiàng)“-o”是指定是指定GCC輸出
32、的結(jié)果。輸出的結(jié)果。 編譯階段編譯階段 gcc S o hello.s hello.i 選項(xiàng)選項(xiàng)“-S”能使編譯器在進(jìn)行完編譯之后就停止能使編譯器在進(jìn)行完編譯之后就停止 匯編階段匯編階段 gcc c hello.s o hello.o 選項(xiàng)選項(xiàng)“-c”把編譯階段生成的把編譯階段生成的“.s”文件生成目標(biāo)文文件生成目標(biāo)文件件 “.o” 鏈接階段鏈接階段 gcc hello.o o hello 可以生成可執(zhí)行文件可以生成可執(zhí)行文件 1.3.2 GCC編譯流程分析編譯流程分析1.3.3 GCC警告提示警告提示 Wall類(lèi)警告提示類(lèi)警告提示 選選 項(xiàng)項(xiàng)作作 用用-Wall打開(kāi)所有類(lèi)型語(yǔ)法警告,建議讀者
33、養(yǎng)成使用該選項(xiàng)的習(xí)慣打開(kāi)所有類(lèi)型語(yǔ)法警告,建議讀者養(yǎng)成使用該選項(xiàng)的習(xí)慣-Wchar-subscripts如果數(shù)組使用如果數(shù)組使用char類(lèi)型變量做為下標(biāo)值的話,則發(fā)出警告。類(lèi)型變量做為下標(biāo)值的話,則發(fā)出警告。因?yàn)樵谀承┢脚_(tái)上可能默認(rèn)為因?yàn)樵谀承┢脚_(tái)上可能默認(rèn)為signed char,一旦溢出,一旦溢出,就可能導(dǎo)致某些意外的結(jié)果就可能導(dǎo)致某些意外的結(jié)果-Wcomment當(dāng)當(dāng)/*出現(xiàn)在出現(xiàn)在 /* . */注釋中,或者注釋中,或者出現(xiàn)在出現(xiàn)在/ .注釋結(jié)尾注釋結(jié)尾處時(shí),使用處時(shí),使用-Wcomment會(huì)給出警告,它很可能會(huì)影響會(huì)給出警告,它很可能會(huì)影響程序的運(yùn)行結(jié)果程序的運(yùn)行結(jié)果-Wformat檢
34、查檢查printf和和scanf等格式化輸入輸出函數(shù)的格式字符串與等格式化輸入輸出函數(shù)的格式字符串與參數(shù)類(lèi)型的匹配情況,如果發(fā)現(xiàn)不匹配則發(fā)出警告。某參數(shù)類(lèi)型的匹配情況,如果發(fā)現(xiàn)不匹配則發(fā)出警告。某些時(shí)候格式字符串與參數(shù)類(lèi)型的不匹配會(huì)導(dǎo)致程序運(yùn)行些時(shí)候格式字符串與參數(shù)類(lèi)型的不匹配會(huì)導(dǎo)致程序運(yùn)行錯(cuò)誤,所以這是個(gè)很有用的警告選項(xiàng)錯(cuò)誤,所以這是個(gè)很有用的警告選項(xiàng)-Wimplicit該警告選項(xiàng)實(shí)際上是該警告選項(xiàng)實(shí)際上是-Wimplicit-int和和-Wimplicit-function-declaration兩個(gè)警告選項(xiàng)的集合。前者在聲兩個(gè)警告選項(xiàng)的集合。前者在聲明函數(shù)卻未指明函數(shù)返回類(lèi)型時(shí)給出警告,
35、后者則是在明函數(shù)卻未指明函數(shù)返回類(lèi)型時(shí)給出警告,后者則是在函數(shù)聲明前調(diào)用該函數(shù)時(shí)給出警告函數(shù)聲明前調(diào)用該函數(shù)時(shí)給出警告1.3.3 GCC警告提示警告提示 Wall類(lèi)警告提示類(lèi)警告提示 選選 項(xiàng)項(xiàng)作作 用用-Wmissing-braces當(dāng)聚合類(lèi)型或者數(shù)組變量的初始化表達(dá)式?jīng)]有充分用括號(hào)當(dāng)聚合類(lèi)型或者數(shù)組變量的初始化表達(dá)式?jīng)]有充分用括號(hào)括起時(shí),給出警告括起時(shí),給出警告-Wparentheses這是一個(gè)很有用的警告選項(xiàng),它能幫助用戶從那些看起來(lái)這是一個(gè)很有用的警告選項(xiàng),它能幫助用戶從那些看起來(lái)語(yǔ)法正確但卻由于操作符優(yōu)先級(jí)或者代碼結(jié)構(gòu)語(yǔ)法正確但卻由于操作符優(yōu)先級(jí)或者代碼結(jié)構(gòu)“障眼障眼”而導(dǎo)致錯(cuò)誤運(yùn)行
36、的代碼中解脫出來(lái)而導(dǎo)致錯(cuò)誤運(yùn)行的代碼中解脫出來(lái)-Wsequence-point關(guān)于順序點(diǎn)(關(guān)于順序點(diǎn)(sequence point),在),在C標(biāo)準(zhǔn)中有解釋?zhuān)粯?biāo)準(zhǔn)中有解釋?zhuān)贿^(guò)很晦澀。我們?cè)谄綍r(shí)編碼中盡量避免寫(xiě)出與實(shí)現(xiàn)相關(guān)、過(guò)很晦澀。我們?cè)谄綍r(shí)編碼中盡量避免寫(xiě)出與實(shí)現(xiàn)相關(guān)、受實(shí)現(xiàn)影響的代碼便是了。而受實(shí)現(xiàn)影響的代碼便是了。而-Wsequence-point選項(xiàng)選項(xiàng)恰恰可以幫我們這個(gè)忙,它可以幫我們查出這樣的代碼恰恰可以幫我們這個(gè)忙,它可以幫我們查出這樣的代碼來(lái),并給出其警告來(lái),并給出其警告-Wswitch這個(gè)選項(xiàng)的功能淺顯易懂,通過(guò)文字描述也可以清晰地說(shuō)這個(gè)選項(xiàng)的功能淺顯易懂,通過(guò)文字描述也
37、可以清晰地說(shuō)明。當(dāng)以一個(gè)枚舉類(lèi)型(明。當(dāng)以一個(gè)枚舉類(lèi)型(enum)作為)作為switch語(yǔ)句的索語(yǔ)句的索引時(shí)但卻沒(méi)有處理引時(shí)但卻沒(méi)有處理default情況,或者沒(méi)有處理所有枚舉情況,或者沒(méi)有處理所有枚舉類(lèi)型定義范圍內(nèi)的情況時(shí),該選項(xiàng)會(huì)給出警告類(lèi)型定義范圍內(nèi)的情況時(shí),該選項(xiàng)會(huì)給出警告1.3.3 GCC警告提示警告提示 Wall類(lèi)警告提示類(lèi)警告提示 選選 項(xiàng)項(xiàng)作作 用用-Wunused-function警告存在一個(gè)未使用的警告存在一個(gè)未使用的static函數(shù)的定義或者存在一個(gè)只函數(shù)的定義或者存在一個(gè)只聲明卻未定義的聲明卻未定義的static函數(shù)函數(shù)-Wunused-label用來(lái)警告存在一個(gè)使用了
38、卻未定義或者存在一個(gè)定義了卻用來(lái)警告存在一個(gè)使用了卻未定義或者存在一個(gè)定義了卻未使用的未使用的label-Wunused-variable用來(lái)警告存在一個(gè)定義了卻未使用的局部變量或者非常量用來(lái)警告存在一個(gè)定義了卻未使用的局部變量或者非常量static變量變量-Wunused-value用來(lái)警告一個(gè)顯式計(jì)算表達(dá)式的結(jié)果未被使用用來(lái)警告一個(gè)顯式計(jì)算表達(dá)式的結(jié)果未被使用-Wunused-parameter用來(lái)警告一個(gè)函數(shù)的參數(shù)在函數(shù)的實(shí)現(xiàn)中并未被用到用來(lái)警告一個(gè)函數(shù)的參數(shù)在函數(shù)的實(shí)現(xiàn)中并未被用到-Wuninitialized該警告選項(xiàng)用于檢查一個(gè)局部自動(dòng)變量在使用之前是否已該警告選項(xiàng)用于檢查一個(gè)局部
39、自動(dòng)變量在使用之前是否已經(jīng)初始化了或者在一個(gè)經(jīng)初始化了或者在一個(gè)longjmp調(diào)用可能修改一個(gè)調(diào)用可能修改一個(gè)non-volatile automatic variable時(shí)給出警告時(shí)給出警告非非Wall類(lèi)警告提示類(lèi)警告提示 (1)“-ansi” 該選項(xiàng)強(qiáng)制該選項(xiàng)強(qiáng)制GCC生成標(biāo)準(zhǔn)語(yǔ)法所要求的告警信息,盡管生成標(biāo)準(zhǔn)語(yǔ)法所要求的告警信息,盡管這還并不能保證所有沒(méi)有警告的程序都是符合這還并不能保證所有沒(méi)有警告的程序都是符合ANSI C標(biāo)標(biāo)準(zhǔn)的。準(zhǔn)的。 (2)“-pedantic” 該選項(xiàng)允許發(fā)出該選項(xiàng)允許發(fā)出ANSI C標(biāo)準(zhǔn)所列的全部警告信息,同樣標(biāo)準(zhǔn)所列的全部警告信息,同樣也不能保證所有沒(méi)有警告
40、的程序都是符合也不能保證所有沒(méi)有警告的程序都是符合ANSI C標(biāo)準(zhǔn)的。標(biāo)準(zhǔn)的。 1.3.3 GCC警告提示警告提示 Linux函數(shù)庫(kù)介紹函數(shù)庫(kù)介紹 Linux中函數(shù)庫(kù)包括兩類(lèi):靜態(tài)庫(kù)和共享庫(kù)。中函數(shù)庫(kù)包括兩類(lèi):靜態(tài)庫(kù)和共享庫(kù)。 靜態(tài)庫(kù)的代碼在編譯時(shí)就已連接到開(kāi)發(fā)人員開(kāi)靜態(tài)庫(kù)的代碼在編譯時(shí)就已連接到開(kāi)發(fā)人員開(kāi)發(fā)的應(yīng)用程序中,而共享庫(kù)是在程序開(kāi)始運(yùn)行發(fā)的應(yīng)用程序中,而共享庫(kù)是在程序開(kāi)始運(yùn)行時(shí)被加載。時(shí)被加載。 系統(tǒng)中可用的庫(kù)都安裝在系統(tǒng)中可用的庫(kù)都安裝在/usr/lib和和/lib目錄下。目錄下。庫(kù)文件名由前綴庫(kù)文件名由前綴lib和庫(kù)名以及后綴組成。根據(jù)和庫(kù)名以及后綴組成。根據(jù)庫(kù)的類(lèi)型不同,后綴名
41、也不一樣。庫(kù)的類(lèi)型不同,后綴名也不一樣。1.3.4 GCC使用庫(kù)函數(shù)使用庫(kù)函數(shù) 相關(guān)路徑選項(xiàng)相關(guān)路徑選項(xiàng) (1)“-I ” GCC使用缺省的路徑來(lái)搜索頭文件,如果想要改變搜索使用缺省的路徑來(lái)搜索頭文件,如果想要改變搜索路徑,用戶可以使用路徑,用戶可以使用“-I”選項(xiàng)。選項(xiàng)?!?I”選項(xiàng)可以在選項(xiàng)可以在頭文件的搜索路徑列表中添加頭文件的搜索路徑列表中添加目錄。這樣,目錄。這樣,GCC就會(huì)到指定的目錄去查找相應(yīng)的頭文件。就會(huì)到指定的目錄去查找相應(yīng)的頭文件。 (2)“-L ” 選項(xiàng)選項(xiàng)“-L ”的功能與的功能與“-I ”類(lèi)似,其區(qū)別就在類(lèi)似,其區(qū)別就在于于“-L”選項(xiàng)是用于指明庫(kù)文件的路徑。選項(xiàng)是用
42、于指明庫(kù)文件的路徑。 gcc hello_sq.c L/root/workspace/gcc/lib lsunq o hello_sq 1.3.4 GCC使用庫(kù)函數(shù)使用庫(kù)函數(shù) 使用不同類(lèi)型鏈接庫(kù)使用不同類(lèi)型鏈接庫(kù) 使用不同類(lèi)型的鏈接庫(kù)的方法很相似,都是使用使用不同類(lèi)型的鏈接庫(kù)的方法很相似,都是使用選項(xiàng)是選項(xiàng)是“-l”(注意這里是小寫(xiě)的(注意這里是小寫(xiě)的“L”)。該選項(xiàng))。該選項(xiàng)是用于指明具體使用的庫(kù)文件。由于在是用于指明具體使用的庫(kù)文件。由于在Linux中函中函數(shù)庫(kù)的命名規(guī)則都是以數(shù)庫(kù)的命名規(guī)則都是以“l(fā)ib”開(kāi)頭的,因此,這里開(kāi)頭的,因此,這里的庫(kù)文件只需填寫(xiě)的庫(kù)文件只需填寫(xiě)lib之后的內(nèi)容
43、即可。之后的內(nèi)容即可。 gcc -o dynamic -L /root/lq/testc/lib/dynamic.o -lmydynamic1.3.4 GCC使用庫(kù)函數(shù)使用庫(kù)函數(shù)1.3.5 GCC代碼優(yōu)化代碼優(yōu)化 GCC可以對(duì)代碼進(jìn)行優(yōu)化,它通過(guò)編譯選項(xiàng)可以對(duì)代碼進(jìn)行優(yōu)化,它通過(guò)編譯選項(xiàng)-On來(lái)控制優(yōu)化代碼的生成,其中來(lái)控制優(yōu)化代碼的生成,其中n是一個(gè)代表優(yōu)化級(jí)是一個(gè)代表優(yōu)化級(jí)別的整數(shù)。別的整數(shù)。 雖然優(yōu)化選項(xiàng)可以加快代碼的運(yùn)行速度,但對(duì)于雖然優(yōu)化選項(xiàng)可以加快代碼的運(yùn)行速度,但對(duì)于調(diào)試而言將是一個(gè)很大的挑戰(zhàn)。因?yàn)榇a在經(jīng)過(guò)調(diào)試而言將是一個(gè)很大的挑戰(zhàn)。因?yàn)榇a在經(jīng)過(guò)優(yōu)化之后,原先在源程序中聲明和
44、使用的變量很優(yōu)化之后,原先在源程序中聲明和使用的變量很可能不再使用,控制流也可能會(huì)突然跳轉(zhuǎn)到其他可能不再使用,控制流也可能會(huì)突然跳轉(zhuǎn)到其他的地方,循環(huán)語(yǔ)句也有可能因?yàn)檠h(huán)展開(kāi)而變得的地方,循環(huán)語(yǔ)句也有可能因?yàn)檠h(huán)展開(kāi)而變得到處都有,所有這些都將使調(diào)試工作異常艱難。到處都有,所有這些都將使調(diào)試工作異常艱難。1.4 嵌入式嵌入式Linux調(diào)試器調(diào)試器GDB的使用的使用 1.4.1 GDB使用實(shí)例使用實(shí)例 1.4.2設(shè)置設(shè)置/刪除斷點(diǎn)刪除斷點(diǎn) 1.4.3數(shù)據(jù)相關(guān)命令數(shù)據(jù)相關(guān)命令 1.4.4調(diào)試運(yùn)行環(huán)境相關(guān)命令調(diào)試運(yùn)行環(huán)境相關(guān)命令 1.4.5堆棧相關(guān)命令堆棧相關(guān)命令 1.4.1 GDB使用實(shí)例使用實(shí)例
45、 進(jìn)入進(jìn)入GDB gdb test 查看文件查看文件l 設(shè)置斷點(diǎn)設(shè)置斷點(diǎn) b 6 查看斷點(diǎn)處情況查看斷點(diǎn)處情況 info b 運(yùn)行代碼運(yùn)行代碼 r 查看變量值查看變量值 p n / p i 觀察變量觀察變量 watch n 單步運(yùn)行單步運(yùn)行 n 程序繼續(xù)運(yùn)行程序繼續(xù)運(yùn)行 c 退出退出GDB q1.4.2設(shè)置設(shè)置/刪除斷點(diǎn)刪除斷點(diǎn)命命 令令 格格 式式作作 用用break+設(shè)置斷點(diǎn)設(shè)置斷點(diǎn)的行號(hào)的行號(hào)用于在程序中對(duì)應(yīng)行設(shè)置斷點(diǎn)用于在程序中對(duì)應(yīng)行設(shè)置斷點(diǎn)tbreak+行號(hào)或函數(shù)名行號(hào)或函數(shù)名設(shè)置臨時(shí)斷點(diǎn),到達(dá)后被自動(dòng)刪除設(shè)置臨時(shí)斷點(diǎn),到達(dá)后被自動(dòng)刪除break+filename+行號(hào)行號(hào)用于在指定
46、文件的對(duì)應(yīng)行設(shè)置斷點(diǎn)用于在指定文件的對(duì)應(yīng)行設(shè)置斷點(diǎn)break+用于在內(nèi)存某一位置處暫停用于在內(nèi)存某一位置處暫停break+行號(hào)行號(hào)+if+條件條件用于設(shè)置條件斷點(diǎn),在循環(huán)中使用非常方便用于設(shè)置條件斷點(diǎn),在循環(huán)中使用非常方便info breakpointswatchpoints查看斷點(diǎn)查看斷點(diǎn)/觀察點(diǎn)的情況觀察點(diǎn)的情況clear+要清除要清除斷點(diǎn)的行號(hào)斷點(diǎn)的行號(hào)用于清除對(duì)應(yīng)行的斷點(diǎn)用于清除對(duì)應(yīng)行的斷點(diǎn)1.4.2 設(shè)置設(shè)置/刪除斷點(diǎn)刪除斷點(diǎn)命命 令令 格格 式式作作 用用delete+要清除要清除斷點(diǎn)的編號(hào)斷點(diǎn)的編號(hào)用于清除斷點(diǎn)和自動(dòng)顯示的表達(dá)式的命令。與用于清除斷點(diǎn)和自動(dòng)顯示的表達(dá)式的命令。與c
47、lear的不同之處:的不同之處:clear要給出斷點(diǎn)的行號(hào),要給出斷點(diǎn)的行號(hào),delete要要給出斷點(diǎn)的編號(hào)。用給出斷點(diǎn)的編號(hào)。用clear命令清除斷點(diǎn)時(shí)命令清除斷點(diǎn)時(shí)GDB會(huì)會(huì)給出提示,而用給出提示,而用delete清除斷點(diǎn)時(shí)清除斷點(diǎn)時(shí)GDB不會(huì)給出不會(huì)給出任何提示任何提示disable+斷點(diǎn)編號(hào)斷點(diǎn)編號(hào)讓所設(shè)斷點(diǎn)暫時(shí)失效。如果要讓多個(gè)編號(hào)處的斷點(diǎn)讓所設(shè)斷點(diǎn)暫時(shí)失效。如果要讓多個(gè)編號(hào)處的斷點(diǎn)失效可將編號(hào)之間用空格隔開(kāi)失效可將編號(hào)之間用空格隔開(kāi)enable+斷點(diǎn)編號(hào)斷點(diǎn)編號(hào)與與disable相反相反awatch+變量變量設(shè)置一個(gè)觀察點(diǎn),當(dāng)變量被讀出或?qū)懭霑r(shí)程序被暫設(shè)置一個(gè)觀察點(diǎn),當(dāng)變量被讀出或
48、寫(xiě)入時(shí)程序被暫停停rwatch+變量變量設(shè)置一個(gè)觀察點(diǎn),當(dāng)變量被程序讀時(shí),程序被暫停設(shè)置一個(gè)觀察點(diǎn),當(dāng)變量被程序讀時(shí),程序被暫停watch+變量變量同同awatch1.4.3 數(shù)據(jù)相關(guān)命令數(shù)據(jù)相關(guān)命令命命 令令 格格 式式作作 用用 display+表達(dá)式表達(dá)式該命令用于顯示表達(dá)式的值,使用了該命令后,該命令用于顯示表達(dá)式的值,使用了該命令后,每當(dāng)程序運(yùn)行到斷點(diǎn)處都會(huì)顯示表達(dá)式的值每當(dāng)程序運(yùn)行到斷點(diǎn)處都會(huì)顯示表達(dá)式的值 info display用于顯示當(dāng)前所有要顯示值的表達(dá)式的有關(guān)情用于顯示當(dāng)前所有要顯示值的表達(dá)式的有關(guān)情況況 delete+display編號(hào)編號(hào)用于刪除一個(gè)要顯示值的表達(dá)式,
49、調(diào)用這個(gè)命用于刪除一個(gè)要顯示值的表達(dá)式,調(diào)用這個(gè)命令刪除一個(gè)表達(dá)式后,被刪除的表達(dá)式將不被令刪除一個(gè)表達(dá)式后,被刪除的表達(dá)式將不被顯示顯示 disable+display編號(hào)編號(hào)使一個(gè)要顯示的表達(dá)式暫時(shí)無(wú)效使一個(gè)要顯示的表達(dá)式暫時(shí)無(wú)效 enable+display編號(hào)編號(hào)disable diplay的反操作的反操作 1.4.3 數(shù)據(jù)相關(guān)命令數(shù)據(jù)相關(guān)命令命命 令令 格格 式式作作 用用 undisplay+display編號(hào)編號(hào)用于結(jié)束某個(gè)表達(dá)式值的顯示用于結(jié)束某個(gè)表達(dá)式值的顯示 whatis+變量變量顯示某個(gè)表達(dá)式的數(shù)據(jù)類(lèi)型顯示某個(gè)表達(dá)式的數(shù)據(jù)類(lèi)型 print(p)+變量或表達(dá)式變量或表達(dá)式用
50、于打印變量或表達(dá)式的值用于打印變量或表達(dá)式的值 set+變量變量變量值變量值改變程序中一個(gè)變量的值改變程序中一個(gè)變量的值 1.4.4調(diào)試運(yùn)行環(huán)境相關(guān)命令調(diào)試運(yùn)行環(huán)境相關(guān)命令命命 令令 格格 式式作作 用用set args設(shè)置運(yùn)行參數(shù)設(shè)置運(yùn)行參數(shù)show args參看運(yùn)行參數(shù)參看運(yùn)行參數(shù)set width+數(shù)目數(shù)目設(shè)置設(shè)置GDB的行寬的行寬cd+工作目錄工作目錄切換工作目錄切換工作目錄run程序開(kāi)始執(zhí)行程序開(kāi)始執(zhí)行step(s)進(jìn)入式(會(huì)進(jìn)入到所調(diào)用的子函數(shù)中)單步執(zhí)行進(jìn)入式(會(huì)進(jìn)入到所調(diào)用的子函數(shù)中)單步執(zhí)行next(n)非進(jìn)入式(不會(huì)進(jìn)入到所調(diào)用的子函數(shù)中)單步執(zhí)行非進(jìn)入式(不會(huì)進(jìn)入到所調(diào)用的子函數(shù)中)單步執(zhí)行finish一直運(yùn)行到函數(shù)返回一直運(yùn)行到函數(shù)返回until+行數(shù)行數(shù)運(yùn)行到函數(shù)某一行運(yùn)行到函數(shù)某一行continue(c)執(zhí)行到下一個(gè)斷點(diǎn)或程序結(jié)束執(zhí)行到下一個(gè)斷點(diǎn)或程序結(jié)束return改變程序流程,直接結(jié)束當(dāng)前函數(shù),并將指定值返回改變程序流程,直接結(jié)束當(dāng)前函數(shù),并將指定值返回call+函數(shù)函數(shù)在當(dāng)前位置執(zhí)行所要運(yùn)行的函數(shù)在當(dāng)前位置執(zhí)行所要運(yùn)行的函數(shù)1.4.5堆棧相關(guān)命令堆棧相關(guān)命令命命 令令 格格 式式作作 用用backtrace或或bt用來(lái)打印棧偵指針,也可以在該命令后加上用來(lái)打印棧
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 湖南省長(zhǎng)沙市瀏陽(yáng)市2024-2025學(xué)年七年級(jí)上學(xué)期1月期末道德與法治試題及答案
- 監(jiān)理師職業(yè)規(guī)劃試題及答案
- 醫(yī)院科室績(jī)效管理制度
- 完善支撐文件管理制度
- 家具展廳銷(xiāo)售管理制度
- 關(guān)鍵工藝設(shè)備管理制度
- 存量清理銷(xiāo)賬管理制度
- 房屋征收公司管理制度
- 大唐公司鑰匙管理制度
- 行政管理過(guò)程中的透明度分析試題及答案
- 小升初語(yǔ)文真題專(zhuān)項(xiàng)訓(xùn)練專(zhuān)題6+文學(xué)常識(shí)與名著閱讀(有解析)
- 埃塞俄比亞 多山之國(guó)
- 電梯安全教育培訓(xùn)知識(shí)
- 外國(guó)名人羅斯福介紹
- 人效提升方案措施
- 2023學(xué)年完整公開(kāi)課版劃船歌
- 嬰幼兒安全與意外事件防范培訓(xùn)課件
- AIAG-VDA-PFMEA表格模板(自動(dòng)計(jì)算AP)
- 妊娠便秘疾病演示課件
- 面試官認(rèn)證考題
- 種植體周?chē)椎念A(yù)防及治療
評(píng)論
0/150
提交評(píng)論