開始使用 zxdb

Zxdb 是非同步偵錯工具,可讓使用者在程序或執行緒執行或停止時,與偵錯工具互動。

Zxdb 會使用名詞、動詞和指令模型來處理輸入的指令。本文將重點介紹 zxdb 偵錯工具的主要功能。

偵錯工具模型

使用 zxdb 時,您可以結合 nounverb 執行大部分動作。

名詞

可能的名詞 (及其縮寫) 如下:

  • 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

根據預設,動詞 (例如 runnextprint 等) 會套用至目前有效的名詞 (如要進一步瞭解有效名詞,請參閱「選取有效名詞」)。

資料顯示動詞

  • 記憶體顯示動詞在 memory 中說明。
  • 註冊顯示動詞會在組件中說明。

說明

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 動詞設定特定物件的設定或屬性。

舉例來說,您可以將有效 processshow-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