第 27 章 本階段總結

在這一階段我們又學習了很多新的語法規則,首先讀者應該回到第 13 章 本階段總結把那些知識點重新總結一遍。然後我們總結一下各種開發調試工具的用法。

1、gcc

-c

編譯生成目標檔案(Relocatable),詳見第 2 節 “main函數和啟動常式”

-Dmacro[=defn]

定義一個宏,詳見第 3 節 “條件預處理指示”

-E

只做預處理而不編譯,cpp命令也可以達到同樣的效果,詳見第 2.1 節 “函數式宏定義”

-g

在生成的目標檔案中添加調試信息,所謂調試信息就是原始碼和指令之間的對應關係,在gdb調試和objdump反彙編時要用到這些信息,詳見第 1 節 “單步執行和跟蹤函數調用”

-Idir

dir是標頭檔所在的目錄,詳見第 2.2 節 “標頭檔”

-Ldir

dir是庫檔案所在的目錄,詳見第 3 節 “靜態庫”

-M-MM

輸出“.o檔案: .c檔案 .h檔案”這種形式的Makefile規則,-MM的輸出不包括系統標頭檔,詳見第 4 節 “自動處理標頭檔的依賴關係”

-o outfile

outfile輸出檔案的檔案名,詳見第 2 節 “main函數和啟動常式”

-O?

各種編譯優化選項,詳見第 6 節 “volatile限定符”

-print-search-dirs

打印庫檔案的預設搜索路徑,詳見第 3 節 “靜態庫”

-S

編譯生成彙編代碼,詳見第 2 節 “main函數和啟動常式”

-v

打印詳細的編譯連結過程,詳見第 2 節 “main函數和啟動常式”

-Wall

打印所有的警告信息,詳見第 4 節 “第一個程序”

-Wl,options

options是傳遞給連結器的選項,詳見第 4 節 “共享庫”

2、gdb

  1. 第 10 章 gdb集中介紹了gdb的基本命令和調試方法。

  2. 第 1 節 “函數調用”提到了gdb的指令級調試和反彙編命令。

  3. 如果一個程序由多個.c檔案編譯連結而成,用gdb調試時如何定位某個源檔案中的某一行代碼呢?在第 1 節 “多目標檔案的連結”有介紹。

  4. 第 6 節 “指向指針的指針與指針數組”提到了用gdb調試時如何給程序提供命令行參數。

3、其它開發調試工具

  1. as,彙編器,用法詳見例 18.1 “最簡單的彙編程序”

  2. ld,連結器,用法詳見例 18.1 “最簡單的彙編程序”,用--verbose選項可以顯示預設連結腳本,詳見第 1 節 “多目標檔案的連結”

  3. readelf,讀ELF檔案信息,用法詳見第 5.1 節 “目標檔案”

  4. objdump,顯示目標檔案中的信息,本書主要用它做反彙編,用法詳見第 5.1 節 “目標檔案”

  5. hexdump,以十六進制或ASCII碼顯示一個檔案,用法詳見第 5.1 節 “目標檔案”

  6. ar,把目標檔案打包成靜態庫,用法詳見第 3 節 “靜態庫”

  7. ranlib,給ar打包的靜態庫建索引,用法詳見第 3 節 “靜態庫”

  8. nm,查看符號表,用法詳見第 2 節 “main函數和啟動常式”