Fuchsia 偵錯工具 (zxdb
) 內建說明系統:
[zxdb] help
如要取得特定指令或主題的說明 (本例中為 step
指令):
[zxdb] help step
互動模式
大多數指令列偵錯工具都會使用專屬模型進行輸入:您正在與偵錯程序的 stdin 和 stdout 互動,或者您正在與偵錯工具互動。相反地,zxdb 具有與大多數 GUI 偵錯工具相似的非同步模型。在此模型中,當任意程序或執行緒正在執行或停止時,使用者只會與偵錯工具互動。
偵錯工具本身啟動程式時,會將程式的 stdout 和 stderr 輸出至控制台。附加時 (使用篩選器或使用 attach
指令) 時,系統會將其導向原始位置。目前無法與程序的 stdin 互動。
Zxdb 有輸入指令的一般名詞/動詞模型。本節的其餘部分會概略介紹適用於所有指令的語法。下方的「工作指南」一節將說明特定指令。
名詞
可能出現的名詞 (及其縮寫) 如下:
process
(pr
)thread
(t
)frame
(f
)breakpoint
(bp
)
列出名詞
如果只輸入名詞,則該名詞會列出該型別的可用物件:
列出附加的程序
[zxdb] process # State Koid Name ▶ 1 Not running 3471 debug_agent_unit_tests.cm
列出目前程序中的執行緒:
[zxdb] thread # State Koid Name ▶ 1 Blocked 1348 initial-thread 2 Blocked 1356 some-other-thread
在目前的執行緒中列出堆疊框架 (必須停止執行緒,詳情請參閱下方的
pause
):[zxdb] frame ▶ 0 fxl::CommandLineFromIterators<const char *const *>() • command_line.h:203 1 fxl::CommandLineFromArgcArgv() • command_line.h:224 2 main() • main.cc:174
選取預設值
如果您輸入名詞及其索引,可以選取該名詞做為後續指令的預設值。另也會提供新預設值的統計資料。
選取執行緒 3,做為日後指令的預設值:
[zxdb] thread 3 Thread 3 Blocked koid=9940 worker-thread
選取中斷點 2 設為預設的中斷點:
[zxdb] breakpoint 2 Breakpoint 2 (Software) on Global, Enabled, stop=All, @ MyFunction
動詞
根據預設,動詞 (run
、next
、print
等) 會套用至目前的預設值。因此,如要評估目前堆疊框架的運算式,只要單獨輸入 print
即可:
[zxdb] print argv[1]
"--foo=bar"
您可在動詞前面加上名詞及其索引來覆寫預設背景資訊。因此,如要評估特定堆疊框架 (在本例中為目前執行緒的第 2 個影格) 的運算式:
[zxdb] frame 2 print argv[1]
"--foo=bar"
您可以繼續加入不同類型的背景資訊。這會指定列印指令的程序、執行緒和框架:
[zxdb] process 1 thread 1 frame 2 print argv[1]
"--foo=bar"
屬性和設定
Debugger 物件有相關聯的設定。使用「get」動詞列出指定物件的設定:
[zxdb] breakpoint 1 get
enabled true
location main
one-shot false
scope global
stop all
type software
特定屬性的「get」指令會列出該屬性和相關相關說明:
[zxdb] breakpoint 1 get scope
... help text here ...
scope = global
「set」指令會設定一個值:
[zxdb] breakpoint 1 set scope="process 1 thread 2"
[zxdb] breakpoint 1 set enabled=false
部分設定是階層式的,執行緒會繼承程序的設定,進而沿用全域範圍的設定。沒有結構定義或參數的「get」指令會列出目前程序和執行緒的全域設定以及其內容。您可以設定通用設定,套用至無特定覆寫值的所有執行緒和程序,或是覆寫特定背景資訊:
[zxdb] set show-stdout = false # Applies to all processes with no override.
[zxdb] process 2 set show-stdout = true # Overrides a specific process.
部分設定是清單。您可以使用 += 來附加,或以「=」指定新值。清單元素以空格分隔 (含空格的字串)。
[zxdb] set symbol-paths = /foo/bar/baz "/home/Dr. Strangelove/cache"
[zxdb] set symbol-paths += /tmp
[zxdb] get symbol-paths
... help text ...
symbol-paths =
• /foo/bar/baz
• "/home/Dr. Strangelove/cache"
• /tmp