在這一階段我們又學習了很多新的語法規則,首先讀者應該回到第 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
在第 10 章 gdb集中介紹了gdb
的基本命令和調試方法。
在第 1 節 “函數調用”提到了gdb
的指令級調試和反彙編命令。
如果一個程序由多個.c
檔案編譯連結而成,用gdb
調試時如何定位某個源檔案中的某一行代碼呢?在第 1 節 “多目標檔案的連結”有介紹。
在第 6 節 “指向指針的指針與指針數組”提到了用gdb
調試時如何給程序提供命令行參數。
3、其它開發調試工具
as
,彙編器,用法詳見例 18.1 “最簡單的彙編程序”。
ld
,連結器,用法詳見例 18.1 “最簡單的彙編程序”,用--verbose
選項可以顯示預設連結腳本,詳見第 1 節 “多目標檔案的連結”。
readelf
,讀ELF檔案信息,用法詳見第 5.1 節 “目標檔案”。
objdump
,顯示目標檔案中的信息,本書主要用它做反彙編,用法詳見第 5.1 節 “目標檔案”。
hexdump
,以十六進制或ASCII碼顯示一個檔案,用法詳見第 5.1 節 “目標檔案”。
ar
,把目標檔案打包成靜態庫,用法詳見第 3 節 “靜態庫”。
ranlib
,給ar
打包的靜態庫建索引,用法詳見第 3 節 “靜態庫”。
nm
,查看符號表,用法詳見第 2 節 “main
函數和啟動常式”。