gcc和gdb的基本操作

YeLing0119發表於2018-10-02

gcc和gdb

yum


  • 線上安裝軟體,使用阿里雲映象站,OPSX
  • 選擇你安裝的系統 點幫助 檢視配置命令列
  • yum –list | grep gdb #查詢要安裝的軟體
  • yum install -y gdb #不需要確認安裝軟體

gcc


1. 預處理 .i檔案
  • -E 預處理
  • -o 指定輸出檔名
    例 : gcc -E hello.c -o hello.i
  • 作用 :
    1. 幹掉註釋
    2. 巨集替換
    3. pragma 不替換
    4. 加入很多行號資訊,用於報錯和警告使用
2. 編譯 .s 檔案
  • -S 編譯
    • 例 : gcc -S hello.i 自動生成hello.s檔案
  • 作用 :
    1. 詞法分析
    2. 語法分析
    3. 語義分析
    4. 優化
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) 斷點編號 :刪除第幾個斷點

除錯段錯誤

  1. 編譯時加上-g選項
  2. ulimit -a 檢視系統資源限制
    ulimit -c unlimited 更改core file size 為 unlimited 用來儲存段錯誤
  3. 執行a.out產生core檔案
  4. gdb a.out core

相關文章