Linux 下 C程序編譯與調試

Linux下的C編程應該在我上操作系統的課程中都有所實踐,但都是些關於進程方面的程序設計,而且也沒有特別系統的對這方面進行練習與實踐。這兩天把Linux C編程這塊的基礎又複習以下,希望自己以後能多加練習。現在把一些基礎的東西都總結以下,希望以後能多複習。


Linux下的c編程,我們主要用的編譯器就是gcc。首先先把gcc回顧一下,Linux系統下的gcc編譯器是一個功能強大、性能優越的編譯器。gcc支持多種平臺的編譯,是Linux系統自由軟件的代表作品。gcc不僅能支持C語言,還支持Ada語言,C++語言,Java語言,Objective C語言,Pascal語言,COBOL語言等更多的語言集的編譯。gcc幾乎支持所有的硬件平臺,使得gcc對於特定的平臺可以編譯出更高效的機器碼。gcc在編譯一個程序的時候,一般需要完成預處理(preprocessing)、編譯(compilation)、彙編(assembly)和鏈接(linkling)過程。使用gcc編譯C程序時,這些過程是使用默認的設置自動完成的,但是用戶可以對這些過程進行設置,控制這些操作的詳細過程。

 

我平時使用最多的語言是C和C++,所以在這裏我只是對這兩種語言的編譯過程進行總結。

 

 

 

C程序的編譯


C程序的後綴名是.C,gcc可以將一個C程序的語文件編譯成一個可執行程序。


??? 注意!!! :書上寫了一句話,編譯以後的程序需要添加可執行的權限纔可以運行。即chmod +x ***.out。但是經過上機的驗證,我們根本不用打這條命令,生成的.out文件默認就是的可執行文件。

 

打開終端,用cd命令進到.c文件所在的目錄中,輸入下面的命令,將這個代碼文件編譯成可執行程序 gcc test.c。這時系統默認生成一個可執行文件 a.out。輸入下面的命令,運行這個程序 ./a.out (./代表當前的目錄路徑)。

 

默認情況下,gcc編譯出的程序爲當前目錄下的文件 a.out。-o參數可以設置輸出的目標文件。 例如下面的命令,可以設置將代碼編譯後生成可執行程序do:gcc a.c -o do。也可以將可執行的文件放到其他的目錄中。例如下面的命令就是將目錄文件設置成/usr目錄下的文件do: gcc a.c -o /usr/do

 

參數-v可以查看程序的編譯過程和顯示已經調用的庫。從顯示的編譯過程可以知道,gcc自動加載了系統的默認配置,調用系統的庫函數完成了程序的編譯過程。

 

注意: gcc可以對多種語言編寫的源代碼。如果源代碼的文件擴展名不是默認的擴展名,gcc就無法編譯這個程序。可以用-x選擇來設置程序的語言。例如有一個c文件我們保存時爲a.u,.u不是C的默認擴展名,而我們又想對其進行編譯。這時用-x參數設置編譯的語言,輸入以下的命令來編譯這個程序:gcc -x ‘c’ a.u 。這樣就可以正常地編譯文件a.u。

 

C++程序的編譯

 

gcc可以編譯C++程序。編譯C++程序和C程序時,使用的是不同的命令。編譯C++程序時,使用的命令是g++。該命令的使用方法語gcc是相似的。例如要編寫一個C++程序test.cpp可以使用以下的命令來完成:g++ test.cpp -o do。

 

 

 

gdb調試程序

 

gdb是一個功能強大的調試工具,可以用開調試C程序或C++程序。在使用這個工具進行程序調試時,主要使用了gdb進行下面5個方面的操作:

(1)啓動程序:在啓動程序時,可以設置程序運行環境。

(2)設置斷點:斷點就是可以在程序設計時暫停程序運行的標記。程序會在斷點處停止,用戶便於查看程序的運行情況。這裏的斷點可以是行數、程序名稱或條件表達式。

(3)查看信息:在斷點停止後,可以查看程序運行的信息和顯示程序變量的值。

(4)分步運行:可以使程序一個語句一個語句的執行,這時可以及時地查看程序的信息。

(5)改變環境:可以在程序運行時改變程序的運行環境和程序變量。

 

在程序中加入調試信息:爲了使用gdb進行程序的調試,需要在編譯程序中加入供gdb使用的調試信息。方法是在編譯程序時使用一個-g參數。例如需要對a.c文件進行調試,在終端中輸入下列的命令:gcc -g -o a.debug a.c(或 gcc -g a.c -o a.debug 都可以)。

 

啓動gdb:在調試文件以前,需要啓動gdb,在終端輸入下面的命令:gdb。這時,gdb啓動並顯示了gdb的版本和版權信息。

 

在gdb中加載需要調試的程序:使用調試一個程序之前,需要加載這個程序。加載的程序的命令是file。如加載a.debug程序, file a.debug

 

在gdb中查看代碼:用gcc命令編譯了程序加入了-g命令以後,編譯後的a.debug程序中加入了默認的斷點。可以用list命令顯示程序的源代碼和斷點。

 

在程序中加入斷點:程序會運行到斷點的位置停止下來,等待用戶處理信息或者查看中間變量。如果自動設置的斷點不能滿足調試要求,可以用break命令增加一個斷點。例如需要在程序的第6行增加一個斷點,可以輸入下面的命令:break 6

 

查看斷點:命令info breakpoint 可以查看程序中設置的斷點(所有斷點的信息)。加上相應的斷點編號,可以查看這一個斷點的信息。

 

運行程序:gdb中的run命令可以使這個程序以調試的模式運行。next命令,是一條一條的進行運行;continue命令,程序運行到下一個斷點的位置停下;step命令也是一條一條的執行,與next命令的作用相似,對程序實現單步運行。不同之處在於,在遇到函數調用時,step函數可以進行到函數內部。而next函數只是一步完成函數的調用。

 

變量的查看:程序在使用run命令後,在某一個斷點處停止,只是可以用print命令對變量的值進行查看。若要查看i變量的值:print i。

 

結束gdb:完成了調試運行以後,輸入“q“命令,退出gdb。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章