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

