指令和互動模型

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
    

動詞

根據預設,動詞 (runnextprint 等) 會套用至目前的預設值。因此,如要評估目前堆疊框架的運算式,只要單獨輸入 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