在 Fuchsia 上啟動 zxdb,非常簡單:
ffx debug connect
偵錯工具啟動後,應該會顯示
Connecting (use "disconnect" to cancel)...
Connected successfully.
👉 To get started, try "status" or "help".
[zxdb]
無論您是使用模擬器或硬體裝置,只要有 95% 時間會正常運作,如果無法正常運作,請查看下方的疑難排解。
疑難排解
建構類型相容
Fuchsia 中的 Debugger 依附於具有特殊權限的系統呼叫,其中最值得注意的是 zx_process_write_memory
。只有在核心標記 kernel.enable-debugging-syscalls
設為 true
時,系統才會啟用這些系統呼叫,這表示 user
和 userdebug
建構類型無法使用偵錯工具。
如果是從來源建構,這些系統呼叫很可能會啟用。
已建構 zxdb 和 debug_agent
Zxdb 取決於名為 debug_agent 的目標端元件。如果錯誤訊息顯示「The plugin service selector 'core/debug_agent:公開:fuchsia.debugger.DebugAgent' doesn't matching the target on 目標上的任何服務」,表示尚未建構 debug_agent。您也可以查看建構目錄中是否有 debug_agent
和 host_x64/zxdb
。
如果版本沒有偵錯工具,請將 //bundles/tools
新增至「宇宙」,使用下列任一方式:
fx <normal_stuff_you_use> --with //bundles/tools
或者,您也可以編輯 <build_dir>/args.gn
並加到底部,直接編輯 GN 引數:
universe_package_labels += [ "//bundles/tools" ]
ffx 可以和裝置交談
確認 ffx 可以找到裝置 (模擬器或硬體裝置),並且已在裝置上啟動 RCS。
$ ffx target list
NAME SERIAL TYPE STATE ADDRS/IP RCS
demo-emu <unknown> core.x64 Product [10.0.2.15, Y
fec0::90e:486e:b6b5:9780,
fec0::487b:fabd:20fa:43ee,
127.0.0.1]
套件伺服器正在執行
在大多數建構設定中,偵錯代理程式都會位於「宇宙」(即「可供使用」) 中,但不會在基礎版本內,因此系統不會在啟動前於系統上執行。您必須執行:
fx serve
已註冊偵錯符號
根據預設,Zxdb 會從符號索引取得偵錯符號的位置。樹狀結構內和大部分樹狀結構外的偵錯符號均會自動註冊。如果問題仍未解決,zxdb 有三個指令列旗標,用於為 zxdb 提供額外的符號查詢位置:--build-id-dir
、--ids-txt
和一般 --symbol-path
。這些元件都有相應的設定,可以使用 set
或 get
處理。
舉例來說,如要新增「.build-id」目錄,請使用 --build-id-dir
標記:
ffx debug connect -- --build-id-dir some/other_location/.build-id
或者將其新增至互動式 UI 的 build-id-dirs
清單選項:
[zxdb] set build-id-dirs += some/other_location/.build-id
針對樹狀結構內開發,ffx debug connect
會自動設定所有必要的標記。
build-id-dir
某些建構會產生 .build-id
目錄。系統已根據版本 ID 為檔案中的符號檔案建立索引。例如,Fchsia 版本本身會在建構目錄內建立 .build-id
目錄,例如:out/x64/.build-id
:您可以透過 --build-id-dir
指令列旗標或 build-id-dirs
設定,將 zxdb 新增至 zxdb。這是最好的方法。
ids-txt
某些建構會產生名為 ids.txt
的檔案,而非 .build-id
目錄,其中會列出對應二進位檔的建構 ID 和本機路徑。您可以透過 --ids-txt
指令列旗標或 ids-txts
設定,將參數新增至 zxdb。因此,這是第二項最佳做法。
symbol-path
另外,--symbol-path
旗標可用來將任意檔案或目錄新增至符號索引。如果路徑指向檔案,系統會將其視為 ELF 檔案並新增至符號索引。
如果是目錄,系統會將指定路徑下的所有二進位檔編入索引。
原始碼位置已正確設定
Fuchsia 建構會產生相對於建構目錄的符號,因此相對路徑看起來像 ../../src/my_component/file.cc
。建構目錄通常是由符號索引提供,因此來源檔案可以位於這個位置。
如果找不到檔案,請手動調整來源對應設定。舉例來說,如果偵錯工具找不到 ./../../src/my_component/file.cc
,且檔案位於 /path/to/fuchsia/src/my_component/file.cc
,您可以
[zxdb] set source-map += ./../..=/path/to/fuchsia
因此偵錯工具會改為尋找 /path/to/fuchsia/src/my_component/file.cc
。如需進一步協助,請查看 get source-map
。