GCC編譯選項(xiàng)及其功能

-L
定義連接庫(kù)文件的目錄

-I
定義 C源碼的頭文件的目錄

-o
后面跟的參數(shù)為要生成的執(zhí)行文件的名

-O
進(jìn)行編譯優(yōu)化,可以指定使用不同的優(yōu)化級(jí)別,從 O2O6,每個(gè)不同的級(jí)別使用的優(yōu)化設(shè)置不同。

相關(guān)的選項(xiàng)還有定義生成的指令碼類型的參數(shù),如 -m486生成486指令,缺省的gcc版本(2.7.2)不支持Pentium代碼。

-g
加入調(diào)試代碼,可以在完成后使用 strip命令刪除用于調(diào)試的信息

-c
僅僅進(jìn)行編譯而不進(jìn)行連接,生成目標(biāo)文件

-fPic
生成相對(duì)地址的代碼,可用于最后生成動(dòng)態(tài)連接庫(kù)

-static
強(qiáng)制生成靜態(tài)連接的程序

-aout
生成 a.out格式的執(zhí)行文件、目標(biāo)代碼等,缺省使用ELF格式

-elf
3.0
之后為缺省設(shè)置,生成ELF格式的目標(biāo)和執(zhí)行代碼


-ansi

只支持 ANSI 標(biāo)準(zhǔn)的 C 語(yǔ)法。這一選項(xiàng)將禁止 GNU C 的某些特色,例如 asm typeof 關(guān)鍵詞。


-DMACRO

以字符串“1”定義 MACRO 宏。

-DMACRO=DEFN

以字符串“DEFN”定義 MACRO 宏。

-E

只運(yùn)行 C 預(yù)編譯器。


-IDIRECTORY

指定額外的頭文件搜索路徑DIRECTORY

-LDIRECTORY

指定額外的函數(shù)庫(kù)搜索路徑DIRECTORY。

-lLIBRARY

連接時(shí)搜索指定的函數(shù)庫(kù)LIBRARY。


-shared

生成共享目標(biāo)文件。通常用在建立共享庫(kù)時(shí)。

-UMACRO

取消對(duì) MACRO 宏的定義。

-w

不生成任何警告信息。

-Wall

生成所有警告信息。


GDB的使用

cat >tst.c

#include<stdio.h>
int func(int n)

{

int sum=0,i;

for(i=0;i<100;i++)

{

sum+=i;

}

return sum;

}
main()

{

int i;

long result =0;

for(i=1;i<=100;i++)
{
result+=i;
}

printf("result[1-100]=%d\n",result);

printf("result[1-250]=%d\n",func(250));

}

編譯生成執(zhí)行文件:(Linux下)
hchen/test> cc -g tst.c -o tst

使用GDB調(diào)試:

hchen/test> gdb tst <---------- 啟動(dòng)GDB
GNU gdb 5.1.1
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-suse-linux"...
(gdb) l <-------------------- l
命令相當(dāng)于list,從第一行開(kāi)始例出原碼。
#include<stdio.h>
int func(int n)

{

int sum=0,i;

for(i=0;i<100;i++)

{

sum+=i;

}

return sum;

}
main()

{

int i;

long result =0;

for(i=1;i<=100;i++)

{

result+=i;

}
printf("result[1-100]=%d\n",result);

printf("result[1-250]=%d\n",func(250));

}
Breakpoint 1, main () at tst.c:17 <----------
在斷點(diǎn)處停住。
17 long result = 0;
(gdb) n <---------------------
單條語(yǔ)句執(zhí)行,next命令簡(jiǎn)寫。
18 for(i=1; i<=100; i++)
(gdb) n
20 result += i;
(gdb) n
18 for(i=1; i<=100; i++)
(gdb) n
20 result += i;
(gdb) c <---------------------
繼續(xù)運(yùn)行程序,continue命令簡(jiǎn)寫。
Continuing.
result[1-100] = 5050 <----------
程序輸出。

Breakpoint 2, func (n=250) at tst.c:5
5 int sum=0,i;
(gdb) n
6 for(i=1; i<=n; i++)
(gdb) p i <---------------------
打印變量i的值,print命令簡(jiǎn)寫。
$1 = 134513808
(gdb) n
8 sum+=i;
(gdb) n
6 for(i=1; i<=n; i++)
(gdb) p sum
$2 = 1
(gdb) n
8 sum+=i;
(gdb) p i
$3 = 2
(gdb) n
6 for(i=1; i<=n; i++)
(gdb) p sum
$4 = 3
(gdb) bt <---------------------
查看函數(shù)堆棧。
#0 func (n=250) at tst.c:5
#1 0x080484e4 in main () at tst.c:24
#2 0x400409ed in __libc_start_main () from /lib/libc.so.6
(gdb) finish <---------------------
退出函數(shù)。
Run till exit from #0 func (n=250) at tst.c:5
0x080484e4 in main () at tst.c:24
24 printf("result[1-250] = %d \n", func(250) );
Value returned is $6 = 31375
(gdb) c <---------------------
繼續(xù)運(yùn)行。
Continuing.
result[1-250] = 31375 <----------
程序輸出。

Program exited with code 027. <--------程序退出,調(diào)試結(jié)束。
(gdb) q <---------------------
退出gdb。
hchen/test>


                                                                                                                    #資料收集自永遠(yuǎn)的Linux

                                                GDB常用命令

命令                        解釋
break NUM               在指定的行上設(shè)置斷點(diǎn)。
bt                      顯示所有的調(diào)用棧幀。該命令可用來(lái)顯示函數(shù)的調(diào)用順序。
clear                   刪除設(shè)置在特定源文件、特定行上的斷點(diǎn)。其用法為:clear FILENAME:NUM。
continue                繼續(xù)執(zhí)行正在調(diào)試的程序。該命令用在程序由于處理信號(hào)或斷點(diǎn)而
                        導(dǎo)致停止運(yùn)行時(shí)。
display EXPR            每次程序停止后顯示表達(dá)式的值。表達(dá)式由程序定義的變量組成。
file FILE               裝載指定的可執(zhí)行文件進(jìn)行調(diào)試。
help NAME               顯示指定命令的幫助信息。
info break              顯示當(dāng)前斷點(diǎn)清單,包括到達(dá)斷點(diǎn)處的次數(shù)等。
info files              顯示被調(diào)試文件的詳細(xì)信息。
info func               顯示所有的函數(shù)名稱。
info local              顯示當(dāng)函數(shù)中的局部變量信息。
info prog               顯示被調(diào)試程序的執(zhí)行狀態(tài)。
info var                顯示所有的全局和靜態(tài)變量名稱。
kill                    終止正被調(diào)試的程序。
list                    顯示源代碼段。
make                    在不退出 gdb 的情況下運(yùn)行 make 工具。
next                    在不單步執(zhí)行進(jìn)入其他函數(shù)的情況下,向前執(zhí)行一行源代碼。
print EXPR              顯示表達(dá)式 EXPR 的值。

                                                                                                                          #joyfire
更詳細(xì)的說(shuō)明請(qǐng)查看:http://joyfire.net/jln/system/8.html