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 從上游套件擷取預先建構的二進位檔下載符號時,debuginfo 可能沒有對應的 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
指令註冊。