Linux下gcc與gdb簡介


gcc編譯器可以將C、C++等語言源程序、匯編程序編譯、鏈接成可執行程序。
gdb是 GNU 開發的一個Unix/Linux下強大的程序調試工具。

linux下沒有后綴名的概念。但 gcc 根據文件的后綴來區別輸入文件的類別:


.c          C語言源代碼文件
.a          由目標文件構成的庫文件
.C、.cc、.cpp     C++源碼文件
.h          頭文件
.i          經過預處理之后的 C 語言文件
.ii          經過預處理之后的 C++ 文件
.o          編譯后的目標文件
.s          匯編源碼文件
.S          經過預編譯的匯編源碼文件


程序由C、C++源代碼到可執行文件共經過了四個階段:

預處理    該階段主要對源碼進行頭文件展開、宏替換等操作
編譯     該階段將經過預處理之后的代碼編譯成 .s 匯編文件
匯編     該階段將匯編文件翻譯成 .o 的中間代碼
鏈接     該階段將用戶文件和庫文件進行鏈接,最終生成可執行文件


gcc 格式有如下兩種:

第一種:gcc 選項 目標文件名 源文件名
第二種:gcc 源文件名 選項 目標文件名

gcc四個階段的處理過程

預處理:  gcc -E -o hello.i hello.c
       gcc -E hello.c -o hello.i
     
編譯:   gcc -S -o hello.S hello.i 
       gcc -S hello.i -o hello.S
   
匯編:   gcc -c -o hello.o hello.S
       gcc -c hello.S -o hello.o
   
鏈接:   gcc -o hello hello.o
       gcc hello.o -o hello
   
也可以一條命令產生可執行文件:   gcc -o hello hello.c
                       gcc hello.c -o hello
        
gcc常用選項:

編譯選項

選項                  內容                        目標文件格式
-c                只預編譯、編譯、匯編,不鏈接              .o
-E                只預處理,不編譯                       .i
-S                只預處理、編譯,不匯編                    .S
-o file             生成名為 file 的文件
-g              在可執行文件中包含調試信息
-v              輸出編譯過程和編譯器版本信息
-static               鏈接靜態庫
-I dir             添加 dir 的頭文件搜索目錄
-L dir             添加 dir 的庫文件搜索目錄
-Iname             鏈接名為 libname.so 的庫文件

警告和出錯選項
-ansi          輸出符合 ANSI C 標准的警告信息
-pedantic       輸出 ANSI C 標准的全部警告信息
-Wall          輸出 gcc 提供的所有警告信息
-w            關閉所有警告信息
-Werror        將所有警告轉化為錯誤

優化選項
-O或O1       一級優化,告訴 gcc 減小代碼長度和執行時間
-O2         二級優化,除了進行 O1 之外,還要進行額外調整,如處理器指令調度
-O3         三級優化,除了進行 O2 之外,還要進行循環展開等調整優化

 

 


使用 gdb 進行程序調試之前,gcc編譯選項必須加上 -g 選項來講調試信息加到可執行文件中。

命令行中輸入:gdb 可執行文件 即可啟動 gdb 對其進行調試

 

gdb 命令:

list 或 l [行號或函數名]           查看指定位置代碼,接行號會將該行顯示於屏幕中央。如果多個文件,可以輸入 l file:行號或函數名
       
run 或 r                    運行代碼

break 或 b [行號或函數名] [條件表達式]   在某行或某函數處設置斷點,也可以當條件滿足時斷點才生效     
info b                      查看斷點信息
delete 斷點號                 刪除斷點
disable 斷點號                將某斷點失效
enable 斷點號                生效某斷點

step 或 s                   單步執行,進入子函數
next 或 n                   單步執行,不進入子函數
continue 或 c                 繼續執行,直到下一斷點或程序結束

print 或 p 表達式或變量          查看表達式或變量的值

set variable 變量=值            修改變量值 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM