GCC參數詳解和GDB調試


GCC參數詳解

gcc 命令的常用選項
選項 解釋
-ansi 只支持 ANSI 標准的 C 語法。這一選項將禁止 GNU C 的某些特色, 例如 asm 或 typeof 關鍵詞。
-c 只編譯並生成目標文件。
-DMACRO 以字符串"1"定義 MACRO 宏。
-DMACRO=DEFN 以字符串"DEFN"定義 MACRO 宏。
-E 只運行 C 預編譯器。
-g 生成調試信息。GNU 調試器可利用該信息。
-IDIRECTORY 指定額外的頭文件搜索路徑DIRECTORY。
-LDIRECTORY 指定額外的函數庫搜索路徑DIRECTORY。
-lLIBRARY 連接時搜索指定的函數庫LIBRARY。
-m486 針對 486 進行代碼優化。
-o FILE 生成指定的輸出文件。用在生成可執行文件時。
-O0 不進行優化處理。
-O 或 -O1 優化生成代碼。
-O2 進一步優化。
-O3 比 -O2 更進一步優化,包括 inline 函數。
-shared 生成共享目標文件。通常用在建立共享庫時。
-static 禁止使用共享連接。
-UMACRO 取消對 MACRO 宏的定義。
-w 不生成任何警告信息。
-Wall 生成所有警告信息。

GDB調試

1.編譯:gcc -o xxx xxx.c
2.生成可調試文件:gcc -o xxx -g xxx.c
3.調試程序:gdb xxx
4.執行程序:
run 直接運行程序到結束或者斷點處
5.設置斷點:break line(行數)或函數名或者條件表達式
break 6 在第6行設置斷點
break Swap 在Swap函數入口設置斷點
break 6 if i == 10 在第6行設置斷點,要求i == 10
6.刪除斷點:
clear 刪除所有斷點
clear 行號 : 刪除這行的斷點
clear 函數名 : 刪除該函數的斷點
7.info break 查看斷點
8.c 繼續執行到下一個斷點
9.print + 變量 打印變量值
10.希望修改內存值,直接輸入 print + *地址 (或指針) = 數值
11.n 下一步
12.q 退出調試

** 例子:**

//我們這里使用第三個值進行交換,是為了方便在調試過程中查看變量的值
void Swap(int* number1,int* number2)
{
    int tmp=(*number1);
    (*number1)=(*number2);
    (*number2)=tmp;
}

int main()
{
    int x=2;
    int y=3;
    Swap(&x,&y);
    retrun 0;
}

二、按下圖步驟做好調試前的准備:

三、調試內容(請按照以下序號順序輸入指令):
①運行程序:(gdb) run

根據上圖顯示,程序正常運行並退出

②設置斷點:(gdb) break 12(行數或者函數名)

③開始調試:(gdb) run

根據上圖顯示,程序執行到斷點處,即第12行處。

④打印變量值:(gdb) print x(變量名)

根據上圖顯示,打印第11行的變量x,顯示值為2

⑤繼續執行下一步:(gdb) n

⑥跳轉到下一個斷點:(gdb) c

根據上圖顯示,在第6行設置了第二個斷點(第一個斷點在第12行),輸入“c”,直接跳轉到第6行,即第二個斷點處。

⑦繼續執行,直到退出函數:(gdb) n

⑧打印Swap函數執行后變量的值:
(gdb) print x
(gdb) print y

⑨退出調試:(gdb) q


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM