詳解GCC與GDB 常用的命令

2021-07-27 09:26:46 字數 3028 閱讀 1457

linux下程式設計,少不了和gcc,gdb打交道,現在總結下常用命令,掌握這些足夠用了。

gcc常用的選項:-o

指定生成的輸出檔案, -e

僅執行編譯預處理

gcc的-e選項,可以讓編譯器在預處理後停止,並輸出預處理結果。 -s

將c**轉換為彙編**

gcc的-s選項,表示在程式編譯期間,在生成彙編**後停止

-wall

顯示警告資訊 -c

生成目標檔案(.o),僅執行編譯操作

gcc -o test test.c :一步到位編譯指令,生成test可執行檔案。

實質上,上述編譯過程是分為四個階段進行的,即預處理(也稱預編譯,preprocessing)、編(compilation)、彙編(assembly)和連線(linking)。

單原始檔--常用編譯命令(以hello.c作為例子)

1.預處理(test.i)

gcc -e test.c -o test.i

將stdio.h 檔案中的內容插入到test.c中生成test.i

2.編譯為彙編**(test.s)

gcc -s test.i -o test.s

將test.i檔案生成test.s彙編檔案

3.彙編

gcc -c test.s -o test.o

gas彙編器將彙編檔案test.s彙編成目標檔案test.o

4.鏈結

gcc聯結器是gas提供的,負責將程式的目標檔案與所需的所有附加的目標檔案連線起來,最終生成可執行檔案。附加的目標檔案包括靜態連線庫和動態連線庫。

gcc test.o -o test

test.o,將其與c標準輸入輸出庫進行連線,最終生成程式test

最後我們把所有目標檔案鏈結成可執行檔案:

gcc –l/usr/dev/mysql/lib –lmysqlclient test.o –o test

linux下的庫檔案分為兩大類分別是動態鏈結庫(通常以.so結尾)和靜態鏈結庫(通常以.a結尾),二者的區別僅在於程式執行時所需的**是在執行時動態載入的,還是在編譯時靜態載入的。預設情況下, gcc

在鏈結時優先使用動態鏈結庫,只有當動態鏈結庫不存在時才考慮使用靜態鏈結庫,如果需要的話可以在編譯時加上-static

選項,強制使用靜態鏈結庫。

gdb

一般來說

gdb主要除錯的是

c/c++

的程式。要除錯

c/c++

的程式,首先在編譯時,我們必須要把除錯資訊加到可執行檔案中。使用編譯器(

cc/gcc/g++

)的-g

引數可以做到這一點。如:

> gcc -g hello.c-o hello

> g++ -g hello.cpp -o hello

如果沒有

-g,你將看不見程式的函式名、變數名,所代替的全是執行時的記憶體位址。當你用

-g把除錯資訊加入之後,並成功編譯目標**以後,讓我們來看看如何用

gdb來除錯他。 啟動

gdb的方法有以下幾種: 1

、gdb

program也就是你的執行檔案,一般在當然目錄下。 2

、gdbcore

用gdb

同時除錯乙個執行程式和

core

檔案,core

是程式非法執行後

coredump

後產生的檔案。 3

、gdb

如果你的程式是乙個服務程式,那麼你可以指定這個服務程式執行時的程序id。

gdb會自動

attach

上去,並除錯他。

program

應該在path

環境變數中搜尋得到。

gdb啟動時,可以加上一些

gdb的啟動開關,詳細的開關可以用

gdb-help

檢視。我在下面只例舉一些比較常用的引數:

-symbols

-s 從指定檔案中讀取符號表。

-se file 

從指定檔案中讀取符號表資訊,並把他用在可執行檔案中。

-core

-c 除錯時

core dump

的core

檔案。

-directory

-d 加入乙個原始檔的搜尋路徑。預設搜尋路徑是環境變數中

path

所定義的路徑。

1 .啟動gdb除錯程式

兩種方式: a:gbd filename   b:啟動gdb後,使用file filename

2.list(l)            檢視程式(括號裡為print縮寫)

3 .break(b) 函式名    在某函式入口處新增斷點

4 .break 行號         在指定行新增斷點

5 .break 檔名:行號 在指定檔案的指定行新增斷點

6 .break 行號 if 條件 當條件為真時,在指定行號斷點生效

例如 b 5 if i=10

7 .infobreak         檢視所有設定的斷點

8 .delete 斷點編號    刪除斷點

9.run(run)           開始執行程式

10.next(n)            單步執行程式(不進入子函式)

11.step(s)            單步執行程式(進入子函式)

12.continue(c)        繼續執行程式

13.print(p) 變數名    檢視指定變數值

14.finish             執行程式,直到當前程式結束

15.watch 變數名       對指定變數名進行監控

16.quit(q)            退出gdb

gcc命令與gdb命令常用選項

用法 gcc 選項 檔名 選項 學用命令 1 編譯.c生成可執行檔案 gcc o hello world hello world.c2 編譯.c檔案生成目錄檔案 gcc 0 hello world.o c hello world.c gcc o hello world hello world.o4 ...

gcc和gdb的常用指令

命令 作用 o 將命令的執行結果寫入檔案中,預設為a.out e預處理操作,生成預處理檔案 s編譯操作,生成組合語言目標檔案 c彙編操作,生成可重定位目標檔案 i 將加入到頭檔案的搜尋目錄中,鏈結時在搜尋標準標頭檔案之前先在進行搜尋 l 將加入到庫檔案的搜尋目錄中,鏈結時在搜尋標準標頭檔案之前先在進...

《GDB命令詳解》

gdb 命令詳細解釋 linux中包含有乙個很有用的除錯工具 gdb gnu debuger 它可以用來除錯c和c 程式,功能不亞於windows下的許多圖形介面的除錯工具。和所有常用的除錯工具一樣,gdb提供了以下功能 監視程式中變數的值 在程式中設定斷點 程式的單步執行 在使用gdb前,必須先載...