版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、v理解:程序設(shè)計環(huán)境(用戶空間和系統(tǒng)空間)理解:程序設(shè)計環(huán)境(用戶空間和系統(tǒng)空間)v理解:基于操作系統(tǒng)的程序設(shè)計(系統(tǒng)調(diào)用)理解:基于操作系統(tǒng)的程序設(shè)計(系統(tǒng)調(diào)用)v掌握:掌握: C/C+編輯器編輯器 GCCv掌握:掌握: GNU make和和makefile的編寫規(guī)則的編寫規(guī)則v了解了解 :C/C+調(diào)試器調(diào)試器 GDBv了解:常用系統(tǒng)調(diào)用及庫函數(shù)的使用方法了解:常用系統(tǒng)調(diào)用及庫函數(shù)的使用方法v了解:常用函數(shù)庫了解:常用函數(shù)庫glib的使用的使用v了解:程序管理軟件了解:程序管理軟件SCCSCVSv理想的程序設(shè)計環(huán)境理想的程序設(shè)計環(huán)境 單任務(wù)環(huán)境單任務(wù)環(huán)境-單用戶、單進(jìn)程單用戶、單進(jìn)程v多任務(wù)
2、環(huán)境下的程序設(shè)計多任務(wù)環(huán)境下的程序設(shè)計 用戶程序不能直接控制系統(tǒng)的硬件設(shè)備用戶程序不能直接控制系統(tǒng)的硬件設(shè)備 用戶程序通過操作系統(tǒng)來控制系統(tǒng)的資源用戶程序通過操作系統(tǒng)來控制系統(tǒng)的資源 存儲中存在:用戶程序空間和系統(tǒng)空間存儲中存在:用戶程序空間和系統(tǒng)空間程序程序程序程序程序程序系統(tǒng)核心空間(內(nèi)核)系統(tǒng)核心空間(內(nèi)核)v建立系統(tǒng)編程的思想建立系統(tǒng)編程的思想 站在資源管理者的角度來分析問題,充分考慮系站在資源管理者的角度來分析問題,充分考慮系統(tǒng)為用戶程序提供哪些服務(wù)和資源,以實現(xiàn)對系統(tǒng)為用戶程序提供哪些服務(wù)和資源,以實現(xiàn)對系統(tǒng)資源的有效利用統(tǒng)資源的有效利用嵌入式系統(tǒng)嵌入式系統(tǒng)v系統(tǒng)調(diào)用系統(tǒng)調(diào)用 用戶
3、程序通過系統(tǒng)調(diào)用實現(xiàn)對系統(tǒng)內(nèi)核功能的使用戶程序通過系統(tǒng)調(diào)用實現(xiàn)對系統(tǒng)內(nèi)核功能的使用及對各種硬件資源的訪問用及對各種硬件資源的訪問 了解:系統(tǒng)調(diào)用的使用方法了解:系統(tǒng)調(diào)用的使用方法 輸入、輸出控制類輸入、輸出控制類 進(jìn)程、線程管理類:創(chuàng)建、終止、同步、互斥等進(jìn)程、線程管理類:創(chuàng)建、終止、同步、互斥等 內(nèi)存及輔存管理類內(nèi)存及輔存管理類 設(shè)備控制類設(shè)備控制類 本地進(jìn)程通信管理類本地進(jìn)程通信管理類 網(wǎng)絡(luò)進(jìn)程通信管理類網(wǎng)絡(luò)進(jìn)程通信管理類v系統(tǒng)調(diào)用與庫函數(shù)的關(guān)系系統(tǒng)調(diào)用與庫函數(shù)的關(guān)系 系統(tǒng)調(diào)用是操作系統(tǒng)系統(tǒng)調(diào)用是操作系統(tǒng)層面提供的服務(wù),庫層面提供的服務(wù),庫函數(shù)是高級語言提供函數(shù)是高級語言提供的服務(wù)的服務(wù)用
4、戶程序用戶程序庫函數(shù)庫函數(shù)用戶程序用戶程序系統(tǒng)調(diào)用系統(tǒng)調(diào)用v編程語言編程語言 低級語言低級語言 機(jī)器語言機(jī)器語言: 能夠由機(jī)器直接執(zhí)行。能夠由機(jī)器直接執(zhí)行。 匯編語言匯編語言: 包含一些助記符,需要由匯編程序包含一些助記符,需要由匯編程序?qū)⑵浞g成機(jī)器語言。將其翻譯成機(jī)器語言。 高級語言:需要由編譯程序和解釋語言將其翻譯高級語言:需要由編譯程序和解釋語言將其翻譯成機(jī)器語言成機(jī)器語言 COBOL、BASIC、C/C+、PASCAL、FORTRAN、JAVAv建立可執(zhí)行程序的步驟建立可執(zhí)行程序的步驟 建立源文件建立源文件 建立目標(biāo)文件建立目標(biāo)文件 建立可執(zhí)行文件建立可執(zhí)行文件v源代碼源代碼v目標(biāo)代
5、碼:由目標(biāo)代碼:由和和把源代碼翻譯成把源代碼翻譯成機(jī)器能夠理解的語言。目標(biāo)代碼不是可執(zhí)行文件,機(jī)器能夠理解的語言。目標(biāo)代碼不是可執(zhí)行文件,它還缺少它還缺少。v可執(zhí)行代碼可能包含其它程序代碼,由可執(zhí)行代碼可能包含其它程序代碼,由將將目標(biāo)代碼和其它程序代碼鏈接在一起,形成完整的目標(biāo)代碼和其它程序代碼鏈接在一起,形成完整的可執(zhí)行程序可執(zhí)行程序庫文件指的是為用戶程庫文件指的是為用戶程序和操作系統(tǒng)之間提供序和操作系統(tǒng)之間提供接口的程序接口的程序v區(qū)別編譯程序和解釋程序區(qū)別編譯程序和解釋程序v編譯程序:把高級語言翻譯成機(jī)器語言。它一次編編譯程序:把高級語言翻譯成機(jī)器語言。它一次編譯所有的程序代碼,在編譯完
6、成之前沒有任何結(jié)果譯所有的程序代碼,在編譯完成之前沒有任何結(jié)果反饋;反饋;v解釋程序:把高級語言翻譯成機(jī)器語言。它一次翻解釋程序:把高級語言翻譯成機(jī)器語言。它一次翻譯一行代碼,并立即將執(zhí)行結(jié)果反饋。譯一行代碼,并立即將執(zhí)行結(jié)果反饋。 編譯程序產(chǎn)生更好且效率更高的目標(biāo)代碼;編譯程序產(chǎn)生更好且效率更高的目標(biāo)代碼; 解釋程序在每次執(zhí)行時都會重新解釋源代碼,解釋程序在每次執(zhí)行時都會重新解釋源代碼,效率較低效率較低Linux中的中的C/C+編譯程序是編譯程序是GCCLinux中的中的SHELL解釋程序是解釋程序是BASHvGCC(GNU C Compiler)是是GNU推出的功能強(qiáng)大、推出的功能強(qiáng)大、性
7、能優(yōu)越的多平臺編譯器,性能優(yōu)越的多平臺編譯器,gcc編譯器能將編譯器能將C、C+語言源程序、匯編語言和目標(biāo)程序編譯、鏈接成可語言源程序、匯編語言和目標(biāo)程序編譯、鏈接成可執(zhí)行文件,以下是執(zhí)行文件,以下是gcc支持編譯的一些源文件的后支持編譯的一些源文件的后綴及其解釋(點擊)綴及其解釋(點擊) 使用使用gcc將將C源代碼文件生成可執(zhí)行文件,需要經(jīng)源代碼文件生成可執(zhí)行文件,需要經(jīng)歷歷4個相關(guān)的步驟:預(yù)處理,編譯,匯編,鏈接個相關(guān)的步驟:預(yù)處理,編譯,匯編,鏈接預(yù)處理預(yù)處理鏈鏈接接編編譯譯組組譯譯源 程 序源 程 序(*.c)可執(zhí)行文件可執(zhí)行文件預(yù)處理器預(yù)處理器編譯器編譯器組譯器組譯器鏈接器鏈接器vg
8、cc的基本用法:的基本用法:gcc 選項選項 文件名列表文件名列表vgcc的選項說明:的選項說明:- c只編譯并生成目標(biāo)文件只編譯并生成目標(biāo)文件(.o)- g生成調(diào)試信息生成調(diào)試信息- o file 指定生成的文件名指定生成的文件名這里的文件名列表指的是需要這里的文件名列表指的是需要編譯和鏈接編譯和鏈接的文件,例的文件,例如如C, C+源文件,目標(biāo)文件,匯編程序代碼等。源文件,目標(biāo)文件,匯編程序代碼等。gcc的選項非常多,可以使用的選項非常多,可以使用man gcc來查看,我們經(jīng)常來查看,我們經(jīng)常使用的選項是使用的選項是 -c -g -ovhello.c gcc -o hello hello.
9、c/. hellov計算階乘的程序計算階乘的程序 將多個源程序編譯成一個可執(zhí)行文件將多個源程序編譯成一個可執(zhí)行文件 gcc -o factorial factorial_main.c factorial.c /. factorial nv編譯一個編譯一個C+程序程序 GCC編譯器可通過后綴名判斷編譯器可通過后綴名判斷c(.c)或或c+程序程序(.C/.cpp),使用,使用g+進(jìn)行編譯進(jìn)行編譯 g+ -o hello_C hello.cppv如果源程序有誤,希望將錯誤信息重定向到某個文如果源程序有誤,希望將錯誤信息重定向到某個文件,以便于逐一糾錯,可使用如下語句件,以便于逐一糾錯,可使用如下語句
10、 gcc hello_error.c -o hello_error 2errorv重定向標(biāo)準(zhǔn)錯誤重定向標(biāo)準(zhǔn)錯誤 1 file: 標(biāo)準(zhǔn)輸出設(shè)備的重定向標(biāo)準(zhǔn)輸出設(shè)備的重定向 2 file: 標(biāo)準(zhǔn)錯誤輸出的重定向標(biāo)準(zhǔn)錯誤輸出的重定向rootstu1 no10# cat errorhello_error.c: In function main:hello_error.c:9: syntax error before printfvGNU make vmakefile 基本結(jié)構(gòu)基本結(jié)構(gòu) vmakefile 變量變量 vGNU make 的主要預(yù)定義變量的主要預(yù)定義變量 v隱含規(guī)則隱含規(guī)則 vmakefi
11、le 范例范例 v運(yùn)行運(yùn)行 makev利用利用 make 工具來自動完成編譯工作。這些工作包工具來自動完成編譯工作。這些工作包括:括:如果僅修改了某幾個源文件,則只重新編譯這如果僅修改了某幾個源文件,則只重新編譯這幾個源文件;如果某個頭文件被修改了,則重新編幾個源文件;如果某個頭文件被修改了,則重新編譯所有包含該頭文件的源文件譯所有包含該頭文件的源文件。利用這種自動編譯。利用這種自動編譯可大大簡化開發(fā)工作,避免不必要的重新編譯。可大大簡化開發(fā)工作,避免不必要的重新編譯。vmake 工具通過一個稱為工具通過一個稱為 makefile 的文件來完成并的文件來完成并自動維護(hù)編譯工作。自動維護(hù)編譯工作
12、。makefile 需要按照某種語法進(jìn)需要按照某種語法進(jìn)行編寫,其中說明了行編寫,其中說明了,并,并。 當(dāng)修改了其中某個源文件時,如果其他源文件依賴當(dāng)修改了其中某個源文件時,如果其他源文件依賴于該文件,則也要重新編譯所有依賴該文件的源文于該文件,則也要重新編譯所有依賴該文件的源文件。件。v默認(rèn)情況下,默認(rèn)情況下,GNU make 工具在當(dāng)前工作目錄中按工具在當(dāng)前工作目錄中按如下順序搜索如下順序搜索 makefile GNU makefile makefile Makefile 在在 UNIX 系統(tǒng)中,習(xí)慣使用系統(tǒng)中,習(xí)慣使用 Makefile作為作為 makefile文件。如果要使用其他文件作
13、為文件。如果要使用其他文件作為 makefile,則可利用類似下面的,則可利用類似下面的 make 命令選項命令選項指定指定 makefile 文件:文件: vmakefile 中一般包含如下內(nèi)容:中一般包含如下內(nèi)容: 需要由需要由 make工具創(chuàng)建的項目,通常是工具創(chuàng)建的項目,通常是和和。通常使用。通常使用“目標(biāo)(目標(biāo)(target)”一一詞來表示要創(chuàng)建的項目。詞來表示要創(chuàng)建的項目。 要創(chuàng)建的項目依賴于哪些文件;要創(chuàng)建的項目依賴于哪些文件; 創(chuàng)建每個項目時需要運(yùn)行的命令;創(chuàng)建每個項目時需要運(yùn)行的命令;例子:假設(shè)你現(xiàn)在有一個例子:假設(shè)你現(xiàn)在有一個 C+ 源文件源文件 test.C,該源文件,該
14、源文件包含有自定義的頭文件包含有自定義的頭文件 test.h,則目標(biāo)文件,則目標(biāo)文件 test.o 明確依明確依賴于兩個源文件:賴于兩個源文件:test.C 和和 test.h。另外你可能只希望利。另外你可能只希望利用用 g+ 命令來生成命令來生成 test.o 目標(biāo)文件。目標(biāo)文件。 這時就可以利用如這時就可以利用如下的下的 makefile 來定義來定義 test.o 的創(chuàng)建規(guī)則的創(chuàng)建規(guī)則 v 實例實例1演示:例演示:例1當(dāng)當(dāng) test.C 或或 test.h 文件在編譯之后又被修改,則文件在編譯之后又被修改,則 make 工具可自動重新編譯工具可自動重新編譯 test.o,如果在前后兩,如
15、果在前后兩次編譯之間,次編譯之間,test.C 和和 test.h 均沒有被修改,而且均沒有被修改,而且 test.o 還存在的話,就沒有必要重新編譯。還存在的話,就沒有必要重新編譯。test.o: test.C test.h g+ -c -g test.C指定指定 test.o 為目標(biāo)為目標(biāo)依賴文件依賴文件指定了如何從目標(biāo)所依賴的文件建立目標(biāo)指定了如何從目標(biāo)所依賴的文件建立目標(biāo)一個一個 makefile 文件中可定義多個目標(biāo),利用文件中可定義多個目標(biāo),利用 make target 命令可指定要編譯的目標(biāo),如果不指定目標(biāo),命令可指定要編譯的目標(biāo),如果不指定目標(biāo), 則則使用第一個目標(biāo)。通常,使用
16、第一個目標(biāo)。通常,makefile 中定義有中定義有 clean 目標(biāo),目標(biāo),可用來清除編譯過程中的中間文件,例如:可用來清除編譯過程中的中間文件,例如: clean: rm -f *.o 運(yùn)行運(yùn)行 make clean 時,將執(zhí)行時,將執(zhí)行 rm -f *.o 命令,最終刪命令,最終刪除所有編譯過程中產(chǎn)生的所有中間文件。除所有編譯過程中產(chǎn)生的所有中間文件。Network: Subrs.o network.o gcc -o Network Subrs.o network.oSubrs.o: Subrs.c Netdefs.h gcc -c Setwork.o: network.c Netdef
17、s.h gcc -c network.cclean: rm -f *.o演示:例演示:例2vGNU 的的 make 工具除提供有建立目標(biāo)的基本功能之工具除提供有建立目標(biāo)的基本功能之外,還有許多便于表達(dá)依賴性關(guān)系以及建立目標(biāo)的外,還有許多便于表達(dá)依賴性關(guān)系以及建立目標(biāo)的命令的特色。其中之一就是命令的特色。其中之一就是。如果你要以相同的編譯選項同時編譯十幾個如果你要以相同的編譯選項同時編譯十幾個 C 源文源文件,而為件,而為,將是非常乏味的。但利用簡單的變量定義,可避免將是非常乏味的。但利用簡單的變量定義,可避免這種乏味的工作這種乏味的工作# Define macros for name of c
18、ompiler CC = gcc # Define a macro for the CC flags CFLAGS = -c -g # A rule for building a object file test.o: test.c test.h $(CC) $(CFLAGS) test.c v GNU make 有許多預(yù)定義的變量,這些變量具有特殊的含義,可在規(guī)則中使用。表 1-5 給出了一些主要的 預(yù)定義變量,除這些變量外,GNU make 還將所有的環(huán)境變量作為自己的預(yù)定義變量。 vGNU make包含有一些包含有一些內(nèi)置的或隱含的規(guī)則內(nèi)置的或隱含的規(guī)則,這些,這些規(guī)則定義了如何規(guī)則定義
19、了如何從不同的依賴文件建立特定類型的從不同的依賴文件建立特定類型的目標(biāo)目標(biāo)。 GNU make 支持兩種類型的隱含規(guī)則:支持兩種類型的隱含規(guī)則: 后綴規(guī)則(后綴規(guī)則(Suffix Rule):后綴規(guī)則是定義隱含):后綴規(guī)則是定義隱含規(guī)則的老風(fēng)格方法。后綴規(guī)則定義了將一個具有規(guī)則的老風(fēng)格方法。后綴規(guī)則定義了將一個具有某個后綴的文件某個后綴的文件(例如,例如,.c 文件文件)轉(zhuǎn)換為具有另外轉(zhuǎn)換為具有另外一種后綴的文件一種后綴的文件(例如,例如,.o 文件文件)的方法。每個后的方法。每個后綴規(guī)則以兩個成對出現(xiàn)的后綴名定義,例如,綴規(guī)則以兩個成對出現(xiàn)的后綴名定義,例如,將將 .c 文件轉(zhuǎn)換為文件轉(zhuǎn)換為
20、 .o 文件的后綴規(guī)則可定義為:文件的后綴規(guī)則可定義為: .c .o: $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $ $ 模式規(guī)則(模式規(guī)則(pattern rules):這種規(guī)則更加通用,):這種規(guī)則更加通用,因為可以利用模式規(guī)則定義更加復(fù)雜的依賴性規(guī)因為可以利用模式規(guī)則定義更加復(fù)雜的依賴性規(guī)則。則。 模式規(guī)則看起來非常類似于正則規(guī)則,但模式規(guī)則看起來非常類似于正則規(guī)則,但在目標(biāo)名稱的前面多了一個在目標(biāo)名稱的前面多了一個 % 號,同時可用來號,同時可用來定義目標(biāo)和依賴定義目標(biāo)和依賴 文件之間的關(guān)系,例如下面的文件之間的關(guān)系,例如下面的模式規(guī)則定義了如何將任意一個模式
21、規(guī)則定義了如何將任意一個 x.c 文件轉(zhuǎn)換為文件轉(zhuǎn)換為 x.o 文件:文件: %.c:%.o $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $ $ vGNU make 命令還有一些其他選項命令還有一些其他選項v根據(jù)圖示依賴關(guān)系編寫一個根據(jù)圖示依賴關(guān)系編寫一個makefile文件,依賴關(guān)文件,依賴關(guān)系圖如下:系圖如下:演示:例演示:例3ns.exe: link.o node.o ns.ogcc -o ns.exe link.o node.o ns.olink.o: link.c link.h.config.hgcc -c ode.o: node.c node.h confi
22、g.hgcc -c s.o: ns.c ns.h config.hgcc -c ns.cclean:rm -f *.ov在開始使用在開始使用automake和和autoconf之前,請先確認(rèn)系之前,請先確認(rèn)系統(tǒng)已經(jīng)安裝以下的軟件:統(tǒng)已經(jīng)安裝以下的軟件: GNU automake GNU autoconf GNU m4 Perl GNU Libtool (如果你需要產(chǎn)生如果你需要產(chǎn)生shared library)automake 所產(chǎn)生的所產(chǎn)生的 makefile 除了可以做到程序的編譯和除了可以做到程序的編譯和鏈接,也已經(jīng)把如何產(chǎn)生程序文件的操作,以及把安裝程序鏈接,也已經(jīng)把如何產(chǎn)生程序文件的
23、操作,以及把安裝程序都考慮進(jìn)去了,所以源程序所存放的目錄架構(gòu)最好符合都考慮進(jìn)去了,所以源程序所存放的目錄架構(gòu)最好符合GNU的標(biāo)準(zhǔn)慣例,下面用的標(biāo)準(zhǔn)慣例,下面用hello.c來作為例子進(jìn)行說明。來作為例子進(jìn)行說明。v在工作目錄下建立一個新的子目錄在工作目錄下建立一個新的子目錄4,再在,再在4下建立下建立一個一個hello的子目錄,這個目錄將作為存放的子目錄,這個目錄將作為存放 hello 這這個程序及其相關(guān)文件的地方:個程序及其相關(guān)文件的地方:#include int main(int argc, char* argv) printf(Hello, GNU!n); return 0;演示:例演示
24、:例4v具體步驟具體步驟 autoscan 產(chǎn)生一個產(chǎn)生一個configure.in的模板,執(zhí)行的模板,執(zhí)行 autoscan 后會產(chǎn)生一個后會產(chǎn)生一個configure.scan 的文件,的文件,可以用它做為可以用它做為configure.in文件的模板:文件的模板: 編輯編輯configure.scan文件,如下所示,并且把文件文件,如下所示,并且把文件名改成名改成configure.in 執(zhí)行執(zhí)行aclocal和和autoconf,分別會產(chǎn)生,分別會產(chǎn)生 aclocal.m4 及及 configure 兩個文件:兩個文件: 編輯編輯Makefile.am文件,內(nèi)容如下:文件,內(nèi)容如下:
25、執(zhí)行執(zhí)行automake -add-missing,Automake 會根據(jù)會根據(jù) Makefile.am產(chǎn)生一些文件,包含最重要的產(chǎn)生一些文件,包含最重要的Makefile.in: 最后執(zhí)行最后執(zhí)行 ./configure :v現(xiàn)在你的目錄下已經(jīng)產(chǎn)生了一個現(xiàn)在你的目錄下已經(jīng)產(chǎn)生了一個Makefile文件,執(zhí)文件,執(zhí)行行make命令就可以開始編譯命令就可以開始編譯hello.c 成執(zhí)行文件,成執(zhí)行文件,最后執(zhí)行最后執(zhí)行./hello:# makegcc -DPACKAGE=hello -DVERSION=1.0 -I. -I. -g -O2 -c hello.cgcc -g -O2 -o he
26、llo hello.o# ./helloHello! GNU!vLinux系統(tǒng)中包含了系統(tǒng)中包含了GNU 調(diào)試程序調(diào)試程序gdb,它是一個,它是一個用來調(diào)試用來調(diào)試C和和 C+ 程序的調(diào)試器??梢允钩绦蜷_發(fā)程序的調(diào)試器。可以使程序開發(fā)者在程序運(yùn)行時觀察程序的內(nèi)部結(jié)構(gòu)和內(nèi)存的使用者在程序運(yùn)行時觀察程序的內(nèi)部結(jié)構(gòu)和內(nèi)存的使用情況。情況。gdb所提供的一些功能如下所示:所提供的一些功能如下所示: 運(yùn)行程序,設(shè)置所有的能影響程序運(yùn)行的參數(shù)和運(yùn)行程序,設(shè)置所有的能影響程序運(yùn)行的參數(shù)和環(huán)境;環(huán)境; 控制程序在指定的條件下停止運(yùn)行;控制程序在指定的條件下停止運(yùn)行; 當(dāng)程序停止時,可以檢查程序的狀態(tài);當(dāng)程序停
27、止時,可以檢查程序的狀態(tài); 修改程序的錯誤,并重新運(yùn)行程序;修改程序的錯誤,并重新運(yùn)行程序; 動態(tài)監(jiān)視程序中變量的值;動態(tài)監(jiān)視程序中變量的值; 可以單步執(zhí)行代碼,觀察程序的運(yùn)行狀態(tài)。可以單步執(zhí)行代碼,觀察程序的運(yùn)行狀態(tài)。 vgdb程序調(diào)試的對象是可執(zhí)行文件,而不是程序的程序調(diào)試的對象是可執(zhí)行文件,而不是程序的源代碼文件。源代碼文件。 如果要讓產(chǎn)生的可執(zhí)行文件可以用來調(diào)試,需如果要讓產(chǎn)生的可執(zhí)行文件可以用來調(diào)試,需在執(zhí)行在執(zhí)行g(shù)cc指令編譯程序時,指令編譯程序時,指定,指定程序在編譯時包含調(diào)試信息。程序在編譯時包含調(diào)試信息。 調(diào)試信息包含程序里的每個變量的類型和在可調(diào)試信息包含程序里的每個變量的
28、類型和在可執(zhí)行文件里的地址映射以及源代碼的行號。執(zhí)行文件里的地址映射以及源代碼的行號。gdb 利用這些信息使源代碼和機(jī)器碼相關(guān)聯(lián)。利用這些信息使源代碼和機(jī)器碼相關(guān)聯(lián)。可在可在 makefile 中如下定義中如下定義 CFLAGS 變量:變量: CFLAGS = -g rootstu1 no10# gcc -g hello_error.c -o hello_error rootstu1 no10# gdbv在在 gdb 提示符處鍵入提示符處鍵入help,將列出命令的,將列出命令的分類,鍵入分類,鍵入 help 后跟后跟命令的分類名,可獲命令的分類名,可獲得該類命令的詳細(xì)清得該類命令的詳細(xì)清單。單
29、。 v如果想要了解某個具如果想要了解某個具體命令體命令(比如比如break)的的幫助信息,在幫助信息,在gdb提提 示符下輸入下面的命示符下輸入下面的命令:令:help breakbreak的作用是設(shè)置斷的作用是設(shè)置斷點點aliases:命令別名:命令別名breakpoints:斷點定義:斷點定義data:數(shù)據(jù)查看:數(shù)據(jù)查看iles:指定并查看文件:指定并查看文件internals:維護(hù)命令:維護(hù)命令running:程序執(zhí)行:程序執(zhí)行stack:調(diào)用棧查看:調(diào)用棧查看statu:狀態(tài)查看:狀態(tài)查看tracepoints:跟蹤程序執(zhí)行。:跟蹤程序執(zhí)行。另一個獲得另一個獲得gdb幫助的方法是瀏幫助
30、的方法是瀏覽覽gdb的手冊頁。的手冊頁。# man gdbvgdb的基本命令的基本命令gdb filename 其中其中filename是要調(diào)試的可執(zhí)行文件。用這種方是要調(diào)試的可執(zhí)行文件。用這種方式運(yùn)行式運(yùn)行g(shù)db可以直接指定想要調(diào)試的程序。這和可以直接指定想要調(diào)試的程序。這和啟動啟動gdb后執(zhí)行后執(zhí)行file filename命令效果完全一樣。命令效果完全一樣。vgdb支持很多的命令且能實現(xiàn)不同的功能。這些命支持很多的命令且能實現(xiàn)不同的功能。這些命令從簡單的令從簡單的到到的復(fù)雜命令,下面列出了在使用的復(fù)雜命令,下面列出了在使用gdb 調(diào)試時會用調(diào)試時會用到的一些命令。到的一些命令。 file
31、命令命令:裝入想要調(diào)試的可執(zhí)行文件:裝入想要調(diào)試的可執(zhí)行文件 cd命令:改變工作目錄命令:改變工作目錄 pwd命令:打印當(dāng)前工作日錄。命令:打印當(dāng)前工作日錄。 run命令命令:執(zhí)行當(dāng)前被調(diào)試的程序。:執(zhí)行當(dāng)前被調(diào)試的程序。 list命令命令:列出正在調(diào)試的應(yīng)用程序的源代碼。:列出正在調(diào)試的應(yīng)用程序的源代碼。 break命令命令:設(shè)置斷點。:設(shè)置斷點。 kill命令命令:停止正在調(diào)試的應(yīng)用程序。:停止正在調(diào)試的應(yīng)用程序。 tbreak命令;設(shè)置臨時斷點。它的語法與命令;設(shè)置臨時斷點。它的語法與break相相同。區(qū)別在于用同。區(qū)別在于用tbreak設(shè)置的斷點執(zhí)行一次之后設(shè)置的斷點執(zhí)行一次之后立即消
32、失。立即消失。 watch命令:設(shè)置監(jiān)視點,監(jiān)視表達(dá)式的變化。命令:設(shè)置監(jiān)視點,監(jiān)視表達(dá)式的變化。 continue命令命令: 繼續(xù)正在執(zhí)行調(diào)試的程序。該命繼續(xù)正在執(zhí)行調(diào)試的程序。該命令用在程序由于處理信號或斷點而導(dǎo)致停止運(yùn)行令用在程序由于處理信號或斷點而導(dǎo)致停止運(yùn)行的情況。的情況。 awatch命令:設(shè)置讀寫監(jiān)視點。當(dāng)要監(jiān)視的表達(dá)命令:設(shè)置讀寫監(jiān)視點。當(dāng)要監(jiān)視的表達(dá)式被讀或?qū)憰r將應(yīng)用程序掛起。它的語法與式被讀或?qū)憰r將應(yīng)用程序掛起。它的語法與watch命令相同。命令相同。 rwatch命令:設(shè)置讀監(jiān)視點,當(dāng)監(jiān)視表達(dá)式被讀命令:設(shè)置讀監(jiān)視點,當(dāng)監(jiān)視表達(dá)式被讀時將程序掛起,等侍調(diào)試。此命令的語法與
33、時將程序掛起,等侍調(diào)試。此命令的語法與watch相同。相同。 next命令命令:執(zhí)行下一條源代碼,但是不進(jìn)入函數(shù):執(zhí)行下一條源代碼,但是不進(jìn)入函數(shù)內(nèi)部。也就是說,將一條函數(shù)調(diào)用作為一條語句內(nèi)部。也就是說,將一條函數(shù)調(diào)用作為一條語句執(zhí)行。執(zhí)行這個命令的前提是已經(jīng)執(zhí)行。執(zhí)行這個命令的前提是已經(jīng)run,開始了,開始了代碼的執(zhí)行。代碼的執(zhí)行。 step命令命令:執(zhí)行下一條源代碼,進(jìn)入函數(shù)內(nèi)部。如:執(zhí)行下一條源代碼,進(jìn)入函數(shù)內(nèi)部。如果調(diào)用了某個函數(shù),會跳到函數(shù)所在的代碼中等候果調(diào)用了某個函數(shù),會跳到函數(shù)所在的代碼中等候一步步執(zhí)行。執(zhí)行這個命令的前提是已經(jīng)用一步步執(zhí)行。執(zhí)行這個命令的前提是已經(jīng)用run開開
34、始執(zhí)行代碼。始執(zhí)行代碼。 display命令命令:在應(yīng)用程序每次停止運(yùn)行時顯示表達(dá):在應(yīng)用程序每次停止運(yùn)行時顯示表達(dá)式的值。式的值。 info break命令命令:顯示當(dāng)前斷點列表,包括每個斷:顯示當(dāng)前斷點列表,包括每個斷點到達(dá)的次數(shù)點到達(dá)的次數(shù) info files命令命令:顯示調(diào)試文件的信息。:顯示調(diào)試文件的信息。 info func命令命令:顯示所有的函數(shù)名。:顯示所有的函數(shù)名。 info local命令命令:顯示當(dāng)前函數(shù)的所有局部變量的:顯示當(dāng)前函數(shù)的所有局部變量的信息。信息。 info prog命令命令:顯示調(diào)試程序的執(zhí)行狀態(tài)。:顯示調(diào)試程序的執(zhí)行狀態(tài)。 print命令命令;顯示表達(dá)
35、式的值。;顯示表達(dá)式的值。 delete命令命令:刪除斷點。指定一個斷點號碼,則:刪除斷點。指定一個斷點號碼,則刪除指定斷點。不指定參數(shù)則刪除所有的斷點。刪除指定斷點。不指定參數(shù)則刪除所有的斷點。 Shell命令:執(zhí)行命令:執(zhí)行Linux Shell命令。命令。 make命令命令:不退出:不退出gdb而重新編譯生成可執(zhí)行文而重新編譯生成可執(zhí)行文件。件。 quit命令命令:退出:退出gdb。#include static char buff256;static char *string;int main() printf(please input a string:n); gets(string); printf(your
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)服務(wù)協(xié)議續(xù)簽文檔:保障雙方權(quán)益(2024版)版
- 2024年05月上海中國銀聯(lián)“銀星”實習(xí)生招考筆試歷年參考題庫附帶答案詳解
- 2025年度軍事工程專用鋼管扣件運(yùn)輸安全保密協(xié)議3篇
- 2025年度合同封面定制與法律風(fēng)險防控策略合同3篇
- 專項補(bǔ)充貸款協(xié)議規(guī)范示例2024一
- 2025年度產(chǎn)品陳列與品牌形象提升協(xié)議書3篇
- 2025年廠房建筑合同范本:廠房建筑與環(huán)保驗收合同規(guī)范4篇
- 2025年產(chǎn)業(yè)園區(qū)場地租賃與產(chǎn)業(yè)金融服務(wù)合同4篇
- 醫(yī)療安全知識培訓(xùn)
- 2025年度虛擬現(xiàn)實產(chǎn)品設(shè)計保密合同(全新版)4篇
- 部編新改版語文一年級下冊《語文園地四》教學(xué)設(shè)計
- 2025年北京鐵路局集團(tuán)招聘筆試參考題庫含答案解析
- 《藥品招商營銷概論》課件
- 曙光磁盤陣列DS800-G10售前培訓(xùn)資料V1.0
- 寺廟祈?;顒臃桨?共6篇)
- 2025年病案編碼員資格證試題庫(含答案)
- 企業(yè)財務(wù)三年戰(zhàn)略規(guī)劃
- 提高膿毒性休克患者1h集束化措施落實率
- 山東省濟(jì)南市天橋區(qū)2024-2025學(xué)年八年級數(shù)學(xué)上學(xué)期期中考試試題
- 主播mcn合同模板
- 2024測繪個人年終工作總結(jié)
評論
0/150
提交評論