开始使用 zxdb

Zxdb 是一个异步调试程序,可让用户与 调试程序。

Zxdb 对输入的命令使用名词、动词和命令模型。此文档 突出显示了 zxdb 调试程序的主要功能。

调试程序模型

使用 zxdb 时,您可以通过将 noun 和 一个 verb

名词

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

  • 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 等)适用于 当前活跃名词(有关当前活跃名词的详情,请参阅 选择活跃名词)。

数据显示动词

  • memory 中涵盖了内存显示动词。
  • 注册显示动词包含在 assembly 中。

帮助

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