## 次
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