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前,必須先載...