Zxdb 是一种异步调试器,可让用户在进程或线程运行或停止时与调试器进行交互。
Zxdb 对类型化命令使用名词、动词和命令模型。本文档重点介绍了 zxdb 调试器的主要功能。
调试器模型
使用 zxdb 时,您可以通过组合 noun 和 verb 来执行大多数操作。
名词
可能使用的名词(及其缩写)包括:
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。
默认情况下,run、next、print 等动词适用于
当前有效名词(如需详细了解有效名词,请参阅
选择有效名词)。
数据显示动词
帮助
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 动词设置给定对象的设置或属性。
例如,您可以将有效 process 的 show-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