連結應用程式、連結庫、驅動程式或作業系統時,建立 .exe 和 .dll 檔案的連結器也會建立一些稱為 符號檔案的其他檔案。
符號檔會保留各種數據,這些數據在執行二進位檔時實際上不需要,但在偵錯程式中可能非常有用。
一般而言,符號檔可能包含:
全域變數
局部變數
函數名稱及其進入點的位址
框架指標遺漏 (FPO) 記錄
原始碼行號碼
這些項目中的每一個都單獨稱為一個 符號。 例如,單一符號檔 Myprogram.pdb 可能包含數百個符號,包括全域變數和函數名稱,以及數百個區域變數。 通常,軟體公司會發行每個符號檔案的兩個版本:包含 公用符號 和 私人符號的完整符號檔案,以及僅包含公用符號的縮減 (剝離) 檔案。 如需詳細資訊,請參閱 公用和私人符號。
偵錯時,您必須確定偵錯工具可以存取與您要偵錯之目標相關聯的符號檔。 即時除錯和偵錯崩潰傾印檔案都需要符號。 您必須取得您想要偵錯之程式碼的適當符號,並將這些符號載入偵錯工具。
Windows 符號
Windows 將其符號保留在副檔名為 .pdb 的檔案中。
編譯器和連結器會控制符號格式。 Visual C++ 連結器會將所有符號放入 .pdb 檔案中。
Windows 作業系統建置了兩個版本。 免費組建 (或零售組建) 具有相對較小的二進位檔,而已檢查組建 (或偵錯組建) 具有較大的二進位檔,程式碼本身中有更多的偵錯符號。 檢查的組建可在 Windows 10 版本 1803 之前的舊版 Windows 上使用。 每個組建都有自己的符號檔案。 在 Windows 上偵錯目標時,您必須使用符合目標上 Windows 組建的符號檔。
下表列出標準 Windows 符號樹狀結構中存在的數個目錄:
| 目錄 | 包含符號檔案 |
|---|---|
ACM |
Microsoft 音訊壓縮管理員檔案 |
COM |
可執行檔 (.com) |
CPL |
控制面板程式 |
DLL |
動態連結程式庫檔案 (.dll) |
DRV |
驅動程式檔案 (.drv) |
EXE |
可執行檔 (.exe) |
SCR |
螢幕保護程式檔案 |
SYS |
驅動程式檔案 (.sys) |