開始使用 zxdb

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

Zxdb 會在輸入的指令中使用名詞、動詞和指令模型。這份文件 醒目顯示 zxdb 偵錯工具的主要功能

Debugger 模型

使用 zxdb 時,只要結合 nounverb

名詞

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

  • breakpoint (bp)

    選取或列出中斷點。

  • filter

    選取或列出程序篩選條件。

  • frame (f)

    選取或列出堆疊框架。

  • global (gl)

    指令的全域覆寫值。

  • process (pr)

    選取或列出程序結構定義。

  • sym-server

    選取或列出符號伺服器。

  • thread (t)

    選取或列出討論串。

列出名詞

如果自行輸入名詞,會列出該類型的可用物件。例如:

中斷點

列出工作階段中的所有中斷點:

[zxdb] 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

調整裁剪大小

列出目前的執行緒中的堆疊框架:

[zxdb] frame
▶ 0 fxl::CommandLineFromIterators<const char *const *>() • command_line.h:203
  1 fxl::CommandLineFromArgcArgv() • command_line.h:224
  2 main() • main.cc:174

程序

列出附加的程序:

[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

選取有效名詞

您可以選取名詞及其對應索引,將該名詞設為有效的名詞 後續指令設定新的有效名詞時,系統會傳回資訊 新的有效名詞例如:

執行緒

選取執行緒 3 做為日後指令使用的有效名詞:

[zxdb] thread 3
Thread 3 Blocked koid=9940 worker-thread

中斷點

選取中斷點 2 做為使用中的名詞:

[zxdb] breakpoint 2
Breakpoint 2 (Software) on Global, Enabled, stop=All, @ MyFunction

動詞

在 zxdb 中,動詞會與名詞相結合,以指定 zxdb 物件 執行偵錯動作如需 zxdb 動詞的完整清單,請參閱 verbs.h

根據預設,動詞如 runnextprint 等 目前使用中的名詞 (如要進一步瞭解有效名詞,請參閱 選取有效名詞)。

資料顯示動詞

  • 記憶體顯示動詞包含在記憶體中。
  • 註冊顯示動詞有在「組合」中說明。

說明

zxdb 偵錯工具內建了說明系統:

[zxdb] help

你也可以取得特定指令的協助。舉例來說,若要瞭解 step 指令:

[zxdb] help step

屬性與設定

zxdb 偵錯工具物件具有相關聯的設定。您可以指定 自訂 zxdb

擷取

您可以使用 get 動詞,列出指定物件的設定。

舉例來說,您可以取得有效 process 的屬性:

[zxdb] 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 屬性的說明,請執行下列動作:

[zxdb] 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:

[zxdb] process set show-stdout true
Set process 1 show-stdout = true

部分設定為階層式設定。執行緒會沿用自己的程序設定。 進而沿用全域範圍的設定如果您使用 get 動詞 會列出全域設定 目前程序和執行緒的設定。

你可以將通用設定套用至所有執行緒和程序,但不 或覆寫特定情境

舉例來說,您可以將 show-stdout 通用設定設為 false

[zxdb] set show-stdout false       # Applies to all processes with no override.
Set global show-stdout = false

部分設定會儲存為清單。舉例來說,您可以使用下列任一種 範例設定 symbol-paths

  • 使用 = 指定新的值:

    [zxdb] set symbol-paths = /tmp/symbols /fuchsia-settings/symbols "/fuchsia settings/symbols"
    Set global symbol-paths =
      • /tmp/symbols
      • /fuchsia-settings/symbols
      • "/fuchsia settings/symbols"
    
  • 使用 += 附加至現有值:

    [zxdb] 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

[zxdb] set language rust
Set global language = rust