开始使用 zxdb

Zxdb 是一种异步调试器,可让用户在进程或线程运行或停止时与调试器进行交互。

Zxdb 对类型化命令使用名词、动词和命令模型。本文档重点介绍了 zxdb 调试器的主要功能。

调试器模型

使用 zxdb 时,您可以通过组合 nounverb 来执行大多数操作。

名词

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

  • breakpoint (bp)

    选择或列出断点。

  • filter

    选择或列出进程过滤条件。

  • frame (f)

    选择或列出堆栈帧。

  • global (gl)

    命令的全局替换。

  • process (pr)

    选择或列出进程上下文。

  • sym-server

    选择或列出符号服务器。

  • thread (t)

    选择或列出线程。

列出名词

如果您单独输入一个名词,系统会列出该类型的可用对象。例如:

breakpoint

列出会话中的所有断点:

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

列出当前线程中的堆栈帧:

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

process

列出已附加的进程:

process
  # State       Koid Name
▶ 1 Not running 3471 debug_agent_unit_tests.cm

thread

列出当前进程中的线程:

thread
  # State   Koid Name
▶ 1 Blocked 1348 initial-thread
  2 Blocked 1356 some-other-thread

选择有效名词

您可以选择一个名词及其各自的索引,使其成为后续命令的有效名词。当您设置新的有效名词时,系统会返回有关新有效名词的信息。例如:

thread

选择线程 3 作为未来命令的有效名词:

thread 3
Thread 3 Blocked koid=9940 worker-thread

breakpoint

选择断点 2 作为有效名词:

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

动词

在 zxdb 中,动词与指定 zxdb 对象的名词结合使用,以执行调试操作。如需查看 zxdb 动词的完整列表,请参阅 verbs.h

默认情况下,runnextprint 等动词适用于 当前有效名词(如需详细了解有效名词,请参阅 选择有效名词)。

数据显示动词

  • 内存显示动词在内存中介绍。
  • 寄存器显示动词在汇编中介绍。

帮助

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