Zxdb 應會自動依環境設定符號設定。
本節說明 zxdb 載入符號的方式。如果想加以協助 來排解 zxdb 符號化工具的常見問題。詳情請參閱 診斷符號問題。
版本 ID
Zxdb 使用二進位的 版本 ID。
舉例來說,如要查看 Linux 二進位檔的建構 ID,請針對notes
ELF 二進位檔:
$ 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
附加在附加程序中目前載入的 Pod它也會顯示
對應的符號檔案 (如果有的話)。
符號伺服器
Zxdb 可以從 Google 伺服器或上游載入預建程式庫的符號
debuginfod
個伺服器。這是為 SDK 提供符號的機制
使用者進行了不在本機建構的任何應用程式。若需更多資訊,請參閲
下載符號。
處理大型二進位檔時,符號可能會是幾 GB
下載過程可能需要一些時間 (通常在幾分鐘內)。
sym-stat
指令會在下載符號時顯示 Downloading...
。
zxdb 下載符號時,會將符號儲存在符號快取中。
symbol-cache
設定包含這個目錄的名稱。
例如:
[zxdb] 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 執行個體
[zxdb] set build-id-dirs += /home/alice/project/out/x64/.build-id
ffx
ffx debug symbol-index add --build-dir /home/alice/project/out/x64/.build-id
然後,這些目錄在輸出內容中會加上 (folder)
註解
sym-stat
,而非目錄中包含的二進位檔數量。
這些二進位檔不會顯示在 sym-stat --dump-index
輸出內容中,原因如下:
zxdb 搜尋符號時,會視需要搜尋這些目錄
並事先列舉這些函式
個別檔案和目錄
只有單一二進位檔案,但不含其他符號資料庫
就能設定該特定檔案的 zxdb。您可以使用
特定檔案的 symbol-paths
,方法是將其新增至路徑清單。
舉例來說,如要將 /home/alice/project/a.out
新增至 symbol-paths
設定:
檔案
[zxdb] set symbol-paths += /home/alice/project/a.out
目錄
[zxdb] set symbol-paths += /home/me/project/build/
您可以看到使用sym-stat
設定的地點狀態
指令例如:
[zxdb] 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 與本機上的符號路徑進行對應
有些人會將 Cloud Storage 視為檔案系統
但實際上不是如果您的版本產生這類檔案且並未自動載入,
您可透過 ids-txts
設定 (檔案名稱清單) 為 Zxdb 指定語言:
舉例來說,如要將 /home/alice/project/build/ids.txt
新增至 ids-txts
設定:
[zxdb] set ids-txts += /home/alice/project/build/ids.txt
當執行ids.txt
sym-stat
或 sym-stat --dump-index
指令。
符號設定
先前提到的設定 瞭解 Zxdb 載入符號的方式一節 就會自動套用該環境本節將說明這些機制
symbol-index-files
設定包含一或多個 JSON 格式檔案,
是由開發環境設定:
[zxdb] get symbol-index-files
symbol-index-files =
• /home/alice/.fuchsia/debug/symbol-index.json
這個檔案可能含有部分全域設定,並參照其他 symbol-index
檔案。一般來說,您使用的每個建構環境都有
從這個全域檔案參照的類似檔案。
在建構環境之間切換時,發現符號不會
載入資料,請確定您的環境已向
ffx debug symbol-index list
指令。