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





