命令和互动模型

Fuchsia 调试程序 (zxdb) 内置帮助系统:

[zxdb] help

如需获取有关特定命令或主题(在本例中为 step 命令)的帮助,请执行以下操作:

[zxdb] help step

互动模型

大多数命令行调试程序都使用独占模式进行输入:您要么与调试进程的 stdin 和 stdout 交互,要么与调试程序进行交互。相比之下,zxdb 具有与大多数 GUI 调试程序类似的异步模型。在此模式下,当任意进程或线程正在运行或停止时,用户仅与调试程序进行交互。

当调试程序本身启动一个程序时,它会将程序的 stdout 和 stderr 输出到控制台。当您附加(使用过滤条件或 attach 命令)时,它们会转到原始位置。目前,无法与进程的 stdin 进行交互。

Zxdb 有一个用于输入命令的常规名词/动词模型。本部分的其余内容概述了适用于所有命令的语法。下面的“任务指南”部分介绍了具体命令。

名词

可能的名词(及其缩写)包括:

  • processpr
  • threadt
  • framef
  • breakpointbp

列出名词

如果您单独输入名词,则会列出该类型的可用对象:

  • 列出附加的进程

    [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