gcc和gdb
yum
- 線上安裝軟體,使用阿里雲映象站,OPSX
- 選擇你安裝的系統 點幫助 檢視配置命令列
- yum –list | grep gdb #查詢要安裝的軟體
- yum install -y gdb #不需要確認安裝軟體
gcc
1. 預處理 .i檔案
- -E 預處理
- -o 指定輸出檔名
例 : gcc -E hello.c -o hello.i
- 作用 :
- 幹掉註釋
- 巨集替換
- pragma 不替換
- 加入很多行號資訊,用於報錯和警告使用
2. 編譯 .s 檔案
- -S 編譯
- 例 : gcc -S hello.i 自動生成hello.s檔案
- 作用 :
- 詞法分析
- 語法分析
- 語義分析
- 優化
3. 彙編 .o檔案
- -c 彙編
- 例 : gcc -c hello.s 自動生成hello.o檔案
- ELF格式檔案
- readelf -h 檢視elf標頭檔案
- nm 從目標檔案中解析出檔案符號資訊
- objdump -dS 反彙編
- strip 刪除檔案符號資訊 相當於給檔案瘦身
4. 連結
- 例 : gcc hello.o 生成a.out檔案 不需要加任何選項
- 作用:將外部程式碼加入到我們的程式中,加上啟動程式碼。
優化級別 :
o0 預設
o1
o2
o3
-Wall 顯示所有的警告資訊
-w 遮蔽所有警告資訊
gdb
- 編譯時加上 -g 選項 加入除錯資訊 gdb a.out
l (list) : 顯示原始碼10行
l 行號 :從指定行顯示10行
直接回車 : 執行上次輸入的指令
l 函式名 : 顯示函式體
b (breakpoint) 行號 : 在程式的指定行設定斷點
b 行號 if 變數 == n : 按條件設定斷點 當變數為N時中斷
i b (info breakpoint) : 檢視設定的斷點
注意:設定斷點不要設定在空行和函式名上,不然容易設定不上
r (run) : 執行程式
n (next) : 下一步,遇到函式不進入
s (step) : 下一步,遇到函式進入函式內部
finish : 結束當前函式,返回到函式呼叫的地方
print 變數 : 列印變數的值
whatis 變數/函式 : 檢視變數/函式的型別
d (delet) 斷點編號 :刪除第幾個斷點
除錯段錯誤
- 編譯時加上-g選項
- ulimit -a 檢視系統資源限制
ulimit -c unlimited 更改core file size 為 unlimited 用來儲存段錯誤
- 執行a.out產生core檔案
- gdb a.out core