Zxdb 應會根據環境自動設定符號。
本節說明 zxdb 如何載入符號。如要瞭解如何排解 zxdb 符號器的常見問題,請參閱「診斷符號問題」。
版本 ID
Zxdb 會使用二進位檔的建構 ID,找出目標裝置上二進位檔的符號。
舉例來說,如要在 Linux 上查看二進位檔的建構 ID,請傾印 ELF 二進位檔的 notes:
$ readelf -n my_binary
... (some other notes omitted) ...
Displaying notes found in: .note.gnu.build-id
Owner Data size Description
GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring)
Build ID: 18cec080fc47cdc07ec554f946f2e73d38541869
sym-stat zxdb 指令會顯示每個二進位檔的建構 ID,以及目前在附加程序中載入的程式庫。如果找到對應的符號檔,也會顯示該檔案。
符號伺服器
Zxdb 可以從 Google 伺服器或上游debuginfod伺服器載入預先建構的程式庫符號。這是為 SDK 使用者提供符號的機制,適用於所有非在本機建構的項目。詳情請參閱「下載符號」。
處理大型二進位檔時,符號可能達到數 GB,因此下載程序可能需要一些時間 (通常在幾分鐘內)。下載符號時,sym-stat 指令會顯示 Downloading...。
zxdb 下載符號時,會將符號儲存在符號快取中。symbol-cache 設定包含這個目錄的名稱。
例如:
get symbol-cache
symbol-cache = /home/me/.fuchsia/debug/symbol-cache
當 zxdb 從上游套件擷取的預先建構二進位檔下載符號時,偵錯資訊可能沒有對應的 ELF 二進位檔 (視伺服器和套件而定)。如果發生這種情況,zxdb 可能會顯示類似下列的錯誤:
...
binary for build_id 26820458adaf5d95718fb502d170fe374ae3ee70 not found on 5 servers
binary for build_id 53eaa845e9ca621f159b0622daae7387cdea1e97 not found on 5 servers
binary for build_id f3fd699712aae08bbaae3191eedba514c766f9d2 not found on 5 servers
binary for build_id 4286bd11475e673b194ee969f5f9e9759695e644 not found on 5 servers
binary for build_id 2d28b51427b49abcd41dcf611f8f3aa6a2811734 not found on 5 servers
binary for build_id 0401bd8da6edab3e45399d62571357ab12545133 not found on 5 servers
...
這表示 debuginfod 伺服器上找不到 ELF 二進位檔案。發生這種情況時,這個特定二進位檔就無法使用 ELF 符號,但這通常不會影響大多數的偵錯情境。最常用的 ELF 特定符號 (可能無法使用) 是 PLT 符號。
您可以使用 sym-stat 指令,確認 DWARF 資訊是否已載入:
libc.so.6
Base: 0x1c85fdc2000
Build ID: 0401bd8da6edab3e45399d62571357ab12545133
Symbols loaded: Yes
Symbol file: /home/alice/.fuchsia/debug/symbol-cache/04/01bd8da6edab3e45399d62571357ab12545133.debug
Source files indexed: 1745
Symbols indexed: 10130
.build-id 目錄符號資料庫
許多建構環境 (包括主要 fuchsia.git 存放區) 都會在名為 .build-id 的標準目錄結構中,加入符號化二進位檔。這個目錄包含的子目錄會根據二進位檔建構 ID 的前兩個字元命名。這些子目錄包含符號檔案,檔名是根據建構 ID 的其餘字元命名。
您可以在指令列上設定一或多個建構 ID 目錄,也可以使用 build-id-dirs 設定 (目錄路徑清單) 互動式設定。
舉例來說,如要將 /home/alice/project/out/x64/.build-id 新增為 build-id-dirs:
zxdb 執行個體
set build-id-dirs += /home/alice/project/out/x64/.build-id
ffx
路徑ffx debug symbol-index add out/default/.build-id然後,這些目錄會在 sym-stat 的輸出內容中以 (folder) 註解,而不是目錄中包含的二進位檔數量。這些二進位檔不會顯示在 sym-stat --dump-index 輸出內容中,因為 zxdb 會在搜尋符號時依需求搜尋這些目錄,而不是預先列舉。
個別檔案和目錄
如果您只有單一二進位檔,沒有其他符號資料庫格式,可以為該特定檔案設定 zxdb。您可以將 symbol-paths 新增至路徑清單,為特定檔案設定 symbol-paths。
舉例來說,如要將 /home/alice/project/a.out 新增至 symbol-paths 設定:
檔案
set symbol-paths += /home/alice/project/a.out
目錄
set symbol-paths += /home/me/project/build/
您可以使用 sym-stat 指令查看所設定位置的狀態。例如:
sym-stat
Symbol index status
This command just refreshed the index.
Use "sym-stat --dump-index" to see the individual mappings.
Indexed Source path
1 /home/alice/a.out
2 /home/alice/project/build/
ids.txt 符號索引
部分較舊的 Google 內部專案會產生名為 ids.txt 的檔案。這個檔案會提供二進位檔建構 ID 與本機系統上符號路徑的對應關係。如果建構作業會產生這類檔案,但系統不會自動載入,您可以使用 ids-txts 設定 (檔案名稱清單) 為 Zxdb 指定檔案:
舉例來說,如要將 /home/alice/project/build/ids.txt 新增至 ids-txts 設定:
set ids-txts += /home/alice/project/build/ids.txt
執行 sym-stat 或 sym-stat --dump-index 指令時,也會顯示 ids.txt 檔案中的符號檔案。
符號設定
環境會自動套用「瞭解 Zxdb 如何載入符號」一節所述的設定。本節說明如何設定這些設定。
symbol-index-files 設定包含一或多個由開發環境設定的 JSON 格式檔案:
get symbol-index-files
symbol-index-files =
• /home/alice/.fuchsia/debug/symbol-index.json
這個檔案可以包含一些全域設定,並參照其他 symbol-index 檔案。通常您正在使用的每個建構環境都有類似的檔案,會從這個全域檔案參照。
如果您在建構環境之間切換,並發現符號未載入,請確認您的環境已透過 ffx debug symbol-index list 指令註冊。