Zxdb 是非同步偵錯工具,可讓使用者在程序或執行緒執行或停止時,與偵錯工具互動。
Zxdb 會使用名詞、動詞和指令模型來處理輸入的指令。本文將重點介紹 zxdb 偵錯工具的主要功能。
偵錯工具模型
使用 zxdb 時,您可以結合 noun 和 verb 執行大部分動作。
名詞
可能的名詞 (及其縮寫) 如下:
breakpoint(bp)選取或列出中斷點。
filter選取或列出程序篩選器。
frame(f)選取或列出堆疊框架。
global(gl)指令的全域覆寫。
process(pr)選取或列出程序環境。
sym-server選取或列出符號伺服器。
thread(t)選取或列出討論串。
產品資訊名詞
如果只輸入名詞,系統會列出該類型的可用物件。例如:
中斷點
列出工作階段中的所有中斷點:
breakpoint
# scope stop enabled type Condition #addrs hit-count location
1 global all true software command_line.has_argv0 == false 1 0 ../../src/cobalt/bin/app/cobalt_main.cc:352
調整裁剪大小
列出目前執行緒中的堆疊框架:
frame
▶ 0 fxl::CommandLineFromIterators<const char *const *>() • command_line.h:203
1 fxl::CommandLineFromArgcArgv() • command_line.h:224
2 main() • main.cc:174
程序
列出附加的程序:
process
# State Koid Name
▶ 1 Not running 3471 debug_agent_unit_tests.cm
執行緒
列出目前程序中的執行緒:
thread
# State Koid Name
▶ 1 Blocked 1348 initial-thread
2 Blocked 1356 some-other-thread
選取主動名詞
您可以選取名詞及其對應的索引,將其設為後續指令的有效名詞。設定新的有效名詞時,系統會傳回新有效名詞的相關資訊。例如:
執行緒
選取執行緒 3,做為日後指令的有效名詞:
thread 3
Thread 3 Blocked koid=9940 worker-thread
中斷點
選取中斷點 2 做為有效名詞:
breakpoint 2
Breakpoint 2 (Software) on Global, Enabled, stop=All, @ MyFunction
動詞
在 zxdb 中,動詞會與名詞搭配使用,名詞會指定 zxdb 物件,以執行偵錯動作。如需完整的 zxdb 動詞清單,請參閱 verbs.h。
根據預設,動詞 (例如 run、next、print 等) 會套用至目前有效的名詞 (如要進一步瞭解有效名詞,請參閱「選取有效名詞」)。
資料顯示動詞
說明
zxdb 偵錯工具內建說明系統:
help
你也可以取得特定指令的相關說明。舉例來說,如要查看 step 指令的說明:
help step
屬性和設定
zxdb 偵錯工具物件有相關聯的設定。您可以指定部分設定,個人化 zxdb。
擷取
您可以使用 get 動詞列出指定物件的設定。
舉例來說,您可以取得有效 process 的屬性:
process get
debug-stepping false
display <empty>
show-stdout true
source-map • /b/s/w/ir/x/w/fuchsia-third_party-rust=/usr/local/home/user/fuchsia/out/default/host_x64/../../../prebuilt/third_party/rust/linux-x64/lib/rustlib/src/rust
vector-format double
你也可以搭配特定屬性使用 get 動詞,列出該屬性及其相關說明。
舉例來說,如要取得 debug-stepping 屬性的說明:
process get debug-stepping
debug-stepping (bool)
Enable very verbose debug logging for thread stepping.
This is used by developers working on the debugger's internal thread
controllers.
debug-stepping = false
設定
您可以使用 set 動詞設定特定物件的設定或屬性。
舉例來說,您可以將有效 process 的 show-stdout 屬性設為 true:
process set show-stdout true
Set process 1 show-stdout = true
部分設定具有階層關係。執行緒會繼承程序的設定,而程序則會繼承全域範圍的設定。如果您使用 get 動詞,但沒有提供內容或參數,系統會列出全域設定,以及目前程序和執行緒的特定設定。
您可以設定全域設定,套用至所有沒有特定覆寫值的執行緒和程序,也可以覆寫特定內容。
舉例來說,您可以將 show-stdout 全域設定設為 false:
set show-stdout false # Applies to all processes with no override.
Set global show-stdout = false
部分設定會以清單形式儲存。舉例來說,您可以使用下列任一範例設定 symbol-paths:
使用
=指定新值:set symbol-paths = /tmp/symbols /fuchsia-settings/symbols "/fuchsia settings/symbols" Set global symbol-paths = • /tmp/symbols • /fuchsia-settings/symbols • "/fuchsia settings/symbols"使用
+=附加至現有值:set symbol-paths += /tmp/symbols2 Set global symbol-paths = • /tmp/symbols • /fuchsia-settings/symbols • "/fuchsia settings/symbols" • /tmp/symbols2
語言
zxdb 會根據目前堆疊框架的程式設計語言評估運算式。如果目前影格的語言不同,zxdb 會預設為 C++。
根據預設,zxdb 會使用 auto 語言。您可以使用 set 動詞覆寫預設語言。
舉例來說,如要將預設語言設為 rust,請執行下列操作:
set language rust
Set global language = rust