版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C語言高級(jí)編程-gcc和gdb22內(nèi)容提綱GCC編譯器GDB調(diào)試工具33GNU工具編譯工具:把一個(gè)源程序編譯為一個(gè)可執(zhí)行程序調(diào)試工具:能對(duì)執(zhí)行程序進(jìn)行源碼或匯編級(jí)調(diào)試軟件工程工具:用于協(xié)助多人開發(fā)或大型軟件項(xiàng)目的管理,如make、CVS、Subvision其他工具:用于把多個(gè)目標(biāo)文件鏈接成可執(zhí)行文件的鏈接器,或者用作格式轉(zhuǎn)換的工具。4部分相關(guān)資源//////index.php45GCC簡(jiǎn)介全稱為GNUCC,GNU項(xiàng)目中符合ANSIC標(biāo)準(zhǔn)的編譯系統(tǒng)編譯如C、C++、ObjectC、Java、Fortran、Pascal、Modula-3和Ada等多種語言GCC是可以在多種硬體平臺(tái)上編譯出可執(zhí)行程序的超級(jí)編譯器,其執(zhí)行效率與一般的編譯器相比平均效率要高20%~30%一個(gè)交叉平臺(tái)編譯器,適合在嵌入式領(lǐng)域的開發(fā)編譯6GCC編譯器的版本GNUCompilerCollectionC,C++,Objective-C,Fortran,Java,AdaGCC4.3.0GCC2.95
July31,1999
GCC3.0
June18,2001
GCC3.2
August14,2002GCC3.3May13,2003Mar5,2008
December3,19977GCC簡(jiǎn)介gcc所支持后綴名解釋.c C原始程序.C/.cc/.cxx C++原始程序.m Objective-C原始程序.i 已經(jīng)過預(yù)處理的C原始程序.ii 已經(jīng)過預(yù)處理的C++原始程序.s/.S 匯編語言原始程序.h 預(yù)處理文件(頭文件).o 目標(biāo)文件.a/.so 編譯后的庫(kù)文件8編譯器的主要組件分析器:分析器將源語言程序代碼轉(zhuǎn)換為匯編語言。因?yàn)橐獜囊环N格式轉(zhuǎn)換為另一種格式(C到匯編),所以分析器需要知道目標(biāo)機(jī)器的匯編語言。匯編器:匯編器將匯編語言代碼轉(zhuǎn)換為CPU可以執(zhí)行字節(jié)碼。鏈接器:鏈接器將匯編器生成的單獨(dú)的目標(biāo)文件組合成可執(zhí)行的應(yīng)用程序。鏈接器需要知道這種目標(biāo)格式以便工作。標(biāo)準(zhǔn)C庫(kù):核心的C函數(shù)都有一個(gè)主要的C庫(kù)來提供。如果在應(yīng)用程序中用到了C庫(kù)中的函數(shù),這個(gè)庫(kù)就會(huì)通過鏈接器和源代碼連接來生成最終的可執(zhí)行程序。9GCC的基本用法和選項(xiàng)Gcc最基本的用法是∶gcc[options][filenames]-c,只編譯,不連接成為可執(zhí)行文件,編譯器只是由輸入的.c等源代碼文件生成.o為后綴的目標(biāo)文件,通常用于編譯不包含主程序的子程序文件。-ooutput_filename,確定輸出文件的名稱為output_filename,同時(shí)這個(gè)名稱不能和源文件同名。如果不給出這個(gè)選項(xiàng),gcc就給出預(yù)設(shè)的可執(zhí)行文件a.out。-g,產(chǎn)生符號(hào)調(diào)試工具(GNU的gdb)所必要的符號(hào)資訊,要想對(duì)源代碼進(jìn)行調(diào)試,我們就必須加入這個(gè)選項(xiàng)。-O,對(duì)程序進(jìn)行優(yōu)化編譯、連接,采用這個(gè)選項(xiàng),整個(gè)源代碼會(huì)在編譯、連接過程中進(jìn)行優(yōu)化處理,這樣產(chǎn)生的可執(zhí)行文件的執(zhí)行效率可以提高,但是,編譯、連接的速度就相應(yīng)地要慢一些。-O2,比-O更好的優(yōu)化編譯、連接,當(dāng)然整個(gè)編譯、連接過程會(huì)更慢。-Idirname,將dirname所指出的目錄加入到程序頭文件目錄列表中,是在預(yù)編譯過程中使用的參數(shù)。-Ldirname,將dirname所指出的目錄加入到程序函數(shù)檔案庫(kù)文件的目錄列表中,是在鏈接過程中使用的參數(shù)。10GCC的錯(cuò)誤類型及對(duì)策第一類∶C語法錯(cuò)誤錯(cuò)誤信息∶文件source.c中第n行有語法錯(cuò)誤(syntexerrror)。有些情況下,一個(gè)很簡(jiǎn)單的語法錯(cuò)誤,gcc會(huì)給出一大堆錯(cuò)誤,我們最主要的是要保持清醒的頭腦,不要被其嚇倒,必要的時(shí)候再參考一下C語言的基本教材。第二類∶頭文件錯(cuò)誤錯(cuò)誤信息∶找不到頭文件head.h(Cannotfindincludefilehead.h)。這類錯(cuò)誤是源代碼文件中的包含頭文件有問題,可能的原因有頭文件名錯(cuò)誤、指定的頭文件所在目錄名錯(cuò)誤等,也可能是錯(cuò)誤地使用了雙引號(hào)和尖括號(hào)。GCC的錯(cuò)誤類型及對(duì)策第三類∶檔案庫(kù)錯(cuò)誤錯(cuò)誤信息∶鏈接程序找不到所需的函數(shù)庫(kù)(ld:-lm:Nosuchfileordirectory)。這類錯(cuò)誤是與目標(biāo)文件相連接的函數(shù)庫(kù)有錯(cuò)誤,可能的原因是函數(shù)庫(kù)名錯(cuò)誤、指定的函數(shù)庫(kù)所在目錄名稱錯(cuò)誤等,檢查的方法是使用find命令在可能的目錄中尋找相應(yīng)的函數(shù)庫(kù)名,確定檔案庫(kù)及目錄的名稱并修改程序中及編譯選項(xiàng)中的名稱。第四類∶未定義符號(hào)錯(cuò)誤信息∶有未定義的符號(hào)(Undefinedsymbol)。這類錯(cuò)誤是在連接過程中出現(xiàn)的,可能有兩種原因∶一是使用者自己定義的函數(shù)或者全局變量所在源代碼文件,沒有被編譯、連接,或者干脆還沒有定義,這需要使用者根據(jù)實(shí)際情況修改源程序,給出全局變量或者函數(shù)的定義體;二是未定義的符號(hào)是一個(gè)標(biāo)準(zhǔn)的庫(kù)函數(shù),在源程序中使用了該庫(kù)函數(shù),而連接過程中還沒有給定相應(yīng)的函數(shù)庫(kù)的名稱,或者是該檔案庫(kù)的目錄名稱有問題,這時(shí)需要使用檔案庫(kù)維護(hù)命令ar檢查我們需要的庫(kù)函數(shù)到底位于哪一個(gè)函數(shù)庫(kù)中,確定之后,修改gcc連接選項(xiàng)中的-l和-L項(xiàng)。12GCC使用實(shí)例#include<stdio.h>intmain(void){inti,j;j=0;i=j+1;printf(“hello,world\n”);printf(“theresultis%d\n”,i);}編譯:$gcc–otesttest.c執(zhí)行:$./test查看更詳細(xì)的信息:
$gcc–v–otesttest.c13GCC編譯過程GCC的編譯流程分為四個(gè)步驟:預(yù)處理(Pre-Processing)編譯(Compiling)匯編(Assembling)鏈接(Linking)編輯器預(yù)處理器編譯器鏈接匯編處理源代碼*.c預(yù)處理文件*.i匯編文件*.s匯編文件*.o可執(zhí)行程序*.exe1414“hello”的演變歷程Pre-processor
(cpp/
gcc-E)Compiler(cc1/
gcc-S)Assembler(as/
gcc-c)Linker(ld)
hello.c
(text)hello.i
(text)hello.s
(text)hello.o
(binary)hello
(binary)printf.o
(binary)15生成預(yù)處理代碼$gcc–Etest.c-otest.i
用wc命令,查看這兩個(gè)階段代碼大?。?wctest.ctest.cpp916127test.c842193416498test.cpp851195016625總用量test.i比test.c增加了很多內(nèi)容,主要是放在系統(tǒng)提供的include文件中的。16生成匯編代碼檢查語法錯(cuò)誤,并生成匯編文件$gcc–Stest.c–otest.s
17生成目標(biāo)代碼方法一,用gcc直接從C源代碼中生成目標(biāo)代碼:$gcc–ctest.s–otest.o方法二,用匯編器從匯編代碼生成目標(biāo)代碼:$astest.s–otest.o18生成可執(zhí)行程序?qū)⒛繕?biāo)程序鏈接庫(kù)資源,生成可執(zhí)行程序$gcctest.s–otest./test1919內(nèi)容提綱GCC編譯器GDB調(diào)試工具20
調(diào)試器--Gdb調(diào)試流程首先使用gcc對(duì)test.c進(jìn)行編譯,注意一定要加上選項(xiàng)‘-g’
#
gcc-gtest.c-otest
#gdbtest
GNUgdbRedHatLinux(-1.21rh)Copyright2004FreeSoftwareFoundation,Inc.GDBisfreesoftware,coveredbytheGNUGeneralPublicLicense,andyouarewelcometochangeitand/ordistributecopiesofitundercertainconditions.Type"showcopying"toseetheconditions.ThereisabsolutelynowarrantyforGDB.Type"showwarranty"fordetails.ThisGDBwasconfiguredas"i386-redhat-linux-gnu"...Usinghostlibthread_dblibrary"/lib/libthread_db.so.1".(gdb)21Gdb調(diào)試流程查看文件(gdb)l設(shè)置斷點(diǎn)
(gdb)b6查看斷點(diǎn)情況
(gdb)infob運(yùn)行代碼
(gdb)r查看變量值(gdb)pn單步運(yùn)行(gdb)n(gdb)s恢復(fù)程序運(yùn)行(gdb)c幫助(gdb)help
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年1月福建廈門市海滄區(qū)教育局所屬事業(yè)單位招聘事業(yè)單位專業(yè)技術(shù)崗位骨干教師19人筆試備考試題及答案解析
- 2026上半年云南事業(yè)單位聯(lián)考民族中學(xué)招聘2人備考題庫(kù)及1套參考答案詳解
- 2026廣東佛山市順德區(qū)華南師范大學(xué)附屬樂從小學(xué)招聘小學(xué)數(shù)學(xué)臨聘教師1人備考題庫(kù)及答案詳解(奪冠系列)
- 2026四川中煙工業(yè)有限責(zé)任公司高層次人才招聘1人備考題庫(kù)及一套答案詳解
- 2026年馬鞍山和縣人民法院公開招聘勞務(wù)派遣制工作人員1名考試備考試題及答案解析
- 2025山東臨沂市河?xùn)|區(qū)教育和體育局部分學(xué)校引進(jìn)緊缺學(xué)科教師34人備考題庫(kù)及答案詳解(考點(diǎn)梳理)
- 2026年度建行研修中心東北研修院社會(huì)招聘1人備考題庫(kù)及答案詳解(奪冠系列)
- 2026海南三亞市教育局下屬事業(yè)單位面向社會(huì)招聘4人筆試備考題庫(kù)及答案解析
- 2026河北衡水市第十二中學(xué)招聘教師筆試備考試題及答案解析
- 2026年中國(guó)水產(chǎn)科學(xué)研究院第一批招聘?jìng)淇碱}庫(kù)(78人)參考答案詳解
- 《廣州天河商圈》課件
- H31341 V2.5 HCIP-TranSmission 傳輸網(wǎng)練習(xí)試題及答案
- 2024年10月自考03291人際關(guān)系學(xué)試題及答案
- 下肢靜脈曲張課件
- (高清版)DZT 0428-2023 固體礦產(chǎn)勘查設(shè)計(jì)規(guī)范
- XXX縣村鎮(zhèn)空氣源熱泵區(qū)域集中供熱項(xiàng)目可行性研究報(bào)告
- 湖州昆侖億恩科電池材料有限公司年產(chǎn)40000噸鋰離子電池電解液項(xiàng)目環(huán)境影響報(bào)告
- 幼兒園班級(jí)體弱兒管理總結(jié)
- 肥胖患者圍術(shù)期麻醉管理
- 核酸印跡與分子雜交
- 金屬罐三片罐結(jié)構(gòu)分析
評(píng)論
0/150
提交評(píng)論