GCC編譯器能將C.C++語言源程序,匯編程序編譯,鏈接為可執(zhí)行的文件
hello.c
#include
int main(void)
{
printf("Hello World!n");
return 0;
}
一:分四個階段編譯
預(yù)處理: gcc ? -E ?hello.c ?-o hello.i
編譯: gcc ?-S hello.i ?-o hello.S
匯編: gcc ?-c ?hello.S ?-o ?hello.o
鏈接: gcc ?hello.o ?-o ?hello
二:單步完成編譯
gcc ?hello.c ?-o ?hello
三:運行
./hello ? ? ?輸出: Hello World!?
編譯選項:
-c ?只是編譯不連接,生成目標(biāo)文件“.o”
-S 只是編譯不匯編,生成匯編代碼
-E 只進行預(yù)編譯,不做其他處理
-g ?在可執(zhí)行程序中包含標(biāo)準(zhǔn)調(diào)試信息(用于GDB調(diào)試)
-o file ?指定輸出文件為file
-v ?打印出編譯器內(nèi)部編譯各過程的命令行信息和編譯器的版本
-static ?鏈接靜態(tài)庫
-l dir ?在頭文件的搜索路徑列表中添加dir 路徑
? ? eg: gcc ?-l ? /home/student/include ? test.c ?-o ?test
-L ?在庫文件的搜索路徑列表中添加dir路徑
-lname 鏈接名為libname.so的庫文件
? ?eg:gcc ?-L /home/student/lib ?-lmylib ?test.c ?-o ?test
警告和出錯選項
-ansi ?輸出符合ANSI ?C標(biāo)準(zhǔn)語法的警告信息
-pedantic ?允許ANSI ?C變準(zhǔn)所列的全部警告信息
-Wall ?允許發(fā)出GCC提供的所有有用的警告信息
-w ?關(guān)閉所有的警告信息
-Werror ? 把所有的警告信息轉(zhuǎn)化為錯誤信息,并在警告發(fā)出時終止編譯過程
GDB 是GNU開源組織發(fā)布的一個強大的Linux下的程序調(diào)試工具,基于命令行的工作模式,主要用來調(diào)試C和C++程序
,通過GDB能在程序運行時動態(tài)觀察程序的內(nèi)部結(jié)構(gòu),變量值和內(nèi)存的使用情況。
使用流程:
查看文件-》設(shè)置斷點-》查看斷點情況-》運行代碼-》查看變量值-》單步運行-》恢復(fù)程序運行
一:GDB中源代碼查看命令
list ?/l ?行號或函數(shù)名 ? ? ? ? ? ?//查看指定位置代碼
list
list
list ? ?// ?顯示當(dāng)前行后面的源程序
list
eg: list ?src/fun1.c:fun1
list
eg:list ?src/fun1.c:1??
二:運行代碼
運行代碼:rum ?/r
三:設(shè)置斷點與恢復(fù)命令
info b?
break ?/b ? ?行號或函數(shù)名<條件表達式>
delete ?斷點號
disable ?斷點號
enable ?斷點號
step ?/s ?單步調(diào)試(進入子函數(shù))
next ?/n ?單步調(diào)試(不進入子函數(shù))
continue ?/c ?繼續(xù)執(zhí)行函數(shù),知道函數(shù)結(jié)束或遇到新的斷點
四:查看運行數(shù)據(jù)命令
print ?/p ?表達式或變量 ? ? ?//查看程序運行時對應(yīng)表達式或變量的值
五:修改運行參數(shù)命令
set ?variable ?變量名=設(shè)定值