1 gcc的使用
gcc是linux下通用的c程式編譯器,具有非常強大的程式編譯功能。
1.1 gcc對源程式副檔名的支援
.c為c語言源**檔案
.a是由目標檔案構成的庫檔案
.c、.cc或、.cpp標識為c++原始檔
.h是程式包含的標頭檔案
.i標識檔案是已經與處理過的c源**檔案,一般為中間**檔案
.ii是已經處理過的c++源**檔案,一般為中間**檔案
.o是編譯後的目標檔案,原始檔生成的中間目標檔案
.s是組合語言源**檔案
.s是經過預編譯的組合語言源**檔案
.o是編譯以後的程式目標檔案,目標檔案經過連線成可執行檔案
1.2 gcc編譯程式
gcc在編譯程式時有很多可選引數,可以輸入gcc –help檢視gcc的這些可選引數。最簡單情況下:
gcc a.c會在同目錄下生成a.out檔案,./a.out可執行這個程式。
引數-o加檔名可設定輸出的檔案,引數-v可檢視程式的編譯過程和系那是已經呼叫的庫,引數-x可設定編譯的語言,如果副檔名不正確時,可使用gcc –x 『c』 a.u進行編譯,可以用-ansic來設定程式使用ansic標準。
編譯c++程式使用g++,引數與gcc命令基本相同。
1.3 編譯過程的控制
編譯程式會自動完成預處理、編譯、彙編和鏈結四個步驟,(1)使用-e可以完成程式的預處理,如gcc –e –o a.cxx a.c,(2)使用-s可在編譯時之生成相應的匯程式設計序檔案,如gcc –s –o a.s a.c,(3)使用-c可以只生成目錄嗲嗎而不生成可執行程式,如gcc –c –o a.0 a.c,(4)gcc可以把上一步驟生成的目錄**檔案生成乙個可執行檔案,如gcc a.o –o aa.out。
2 gdb除錯程式
gdb主要進行下面幾個方面的操作,包括啟動程式、設定斷點、檢視資訊、分布執行和改變環境。
2.1在程式中加入除錯資訊
在編譯程式時使用-g引數,gcc –g –o a.debuga.c,這時候生成乙個a.debug的可執行程式,以供除錯使用。
2.2啟動gdb
在終端中輸入gdb即可啟動gdb.
2.3載入需要除錯的程式
使用gdb除錯乙個程式之前,需要載入這個程式,引導程式的命令式file,如file a.debug。
2.4檢視**
a.debug程式中自動加入了斷點,使用list命令顯示程式的源**和斷點,如list 1。
2.5 在程式中加入斷點
當需要在程式的第六行增加乙個斷點時,可輸入一下命令,break 6。
2.6檢視斷點
命令「infobreakpoint」可以檢視程式中設定的斷點,加入相應的斷點編號,可以檢視其中乙個斷點的資訊,如info breakpoint 2。
2.7 執行程式
run命令執行程式,next會在下一行停下,continue會在下乙個斷點的位置停下,step實現對程式的單步執行
2.8 變數的檢視
print命令可實現對變數的檢視,如printi。
2.9 使用gdb幫助
在gdb中輸入help命令,可顯示幫助資訊,helpall可顯示所有幫助資訊。
2.10 gdb常用命令
breaktrace:顯示程式中的當前位置和表示如何到達當前位置的棧跟蹤。
breakpoint:在程式中設定乙個斷點。
cd:改變當前工作目錄。
clear:刪除剛才停止處的斷點。
commands:命中斷點時,列出將要執行的命令。
continue:從斷點開始繼續執行。
delete:刪除乙個斷點或監測點。
display:程式停止時顯示變數和表示式。
down:下移棧幀,使得另乙個函式成為當前函式。
frame:選擇嚇一跳continue命令的幀
info:顯示與該程式有關的各種資訊。
infobreak:顯示當前斷點清單,包括到達斷點處的次數。
infofiles:顯示被除錯檔案的詳細資訊。
infofunc:顯示所有的函式名稱。
infolocal:顯示當前函式中的區域性變數資訊。
Linux下gcc編譯器和g 編譯器的那些事兒
使用c c 程式設計大約有三四個年頭了。最開始涉及到微控制器 嵌入式linux等,都使用的是c語言,那時主要寫linux驅動,甚至在arm板上寫linux應用程式時需要應用物件導向的思想的時候,都是使用c語言的結構體和函式指標來實現。當然,使用的編譯器自然就是gcc了。後來,慢慢的轉向了使用c 編寫...
GCC編譯器和GDB偵錯程式
gcc gnu compiler collection 是目前linux下最常用的c語言編譯器,它是gnu專案中符合ansi c標準的編譯系統,可以在多種硬體平台上編譯出可執行程式的超級編譯器,執行效率與一般的編譯器相比平均效率要高20 30 在終端中輸入下列命令 gcc options filen...
gcc編譯器和gdb偵錯程式
將高階語言 c語言 程式編譯成為機器可識別的指令 編譯過程 預處理 去掉注釋,展開所有 編譯 語義 語法糾錯,將 解釋成為彙編 彙編 將彙編 解釋成為機器指令 連線 鏈結 庫以及所有的目標檔案,生成可執行程式 庫檔案 大佬實現一些常用的功能介面,為了防止每次編譯耗費大量時間,因此將這些介面 進行編譯...