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
动词
默认情况下,动词(run
、next
、print
等)适用于当前的默认设置。因此,如需在当前堆栈帧的上下文中评估表达式,只需单独输入 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