协议
收集器
在 fuchsia.memory.heapdump.client/client.fidl 中定义
用于请求和检索内存配置文件的协议。
DownloadStoredSnapshot
检索存储的快照。
请求
名称 | 类型 |
---|---|
payload |
CollectorDownloadStoredSnapshotRequest
|
ListStoredSnapshot
检索所有可用的存储快照的列表。
请求
名称 | 类型 |
---|---|
payload |
CollectorListStoredSnapshotsRequest
|
实时快照
获取插桩流程中当前实时分配的快照。
请求
名称 | 类型 |
---|---|
payload |
CollectorTakeLiveSnapshotRequest
|
快照接收器
在 fuchsia.memory.heapdump.client/client.fidl 中定义
将快照作为元素流传输的协议。
批量
交付一批快照元素。
系统会反复调用该函数,直到没有任何元素剩余为止,最后用空矢量发出信号来指示数据流已结束。
请求
名称 | 类型 |
---|---|
batch |
vector<SnapshotElement>
|
回复
<空>
ReportError
报告错误。不会发生其他批次或错误。
请求
名称 | 类型 |
---|---|
error |
CollectorError
|
回复
<空>
StoredSnapshotIterator
在 fuchsia.memory.heapdump.client/client.fidl 中定义
用于检索 StoredSnapshot 列表的协议。
获取下一步
检索下一批 StoredSnapshots 元素。
空响应表示列表结束。
请求
<空>
回复
名称 | 类型 |
---|---|
payload |
StoredSnapshotIterator_GetNext_Result
|
结构
版本号
在 fuchsia.memory.heapdump.client/client.fidl 中定义
ELF build ID。
字段 | 类型 | 说明 | 默认 |
---|---|---|---|
value |
vector<uint8>[32]
|
无默认值 |
StoredSnapshotIterator_GetNext_Response
在 fuchsia.memory.heapdump.client/client.fidl 中定义
字段 | 类型 | 说明 | 默认 |
---|---|---|---|
batch |
vector<StoredSnapshot>
|
无默认值 |
枚举
CollectorError 柔性
类型:uint32
在 fuchsia.memory.heapdump.client/client.fidl 中定义
方法失败的原因。
名称 | 值 | 说明 |
---|---|---|
PROCESS_SELECTOR_UNSUPPORTED |
1 |
不支持指定的 ProcessSelector 值。 |
PROCESS_SELECTOR_NO_MATCH |
2 |
给定的 ProcessSelector 值与任何进程都不匹配。 |
PROCESS_SELECTOR_AMBIGUOUS |
3 |
给定的 ProcessSelector 值与多个进程匹配,但请求的操作需要唯一匹配。 |
LIVE_SNAPSHOT_FAILED |
4 |
未能截取实时快照。 |
STORED_SNAPSHOT_NOT_FOUND(保存) |
5 |
请求的 StoredSnapshot 不存在。 |
表格
分配
在 fuchsia.memory.heapdump.client/client.fidl 中定义
分配的内存块。
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
address |
uint64
|
内存块的地址。 |
2 |
size |
uint64
|
块大小(以字节为单位)。 |
3 |
stack_trace_key |
StackTraceKey
|
分配点的堆栈轨迹。 |
4 |
timestamp |
zx/Time
|
分配时间戳。 |
5 |
thread_info_key |
ThreadInfoKey
|
分配线程。 |
BlockContents
在 fuchsia.memory.heapdump.client/client.fidl 中定义
已分配内存块的内容。
为了避免超出通道的最大消息大小,可以将较大的分块拆分为分块。接收器应准备好处理具有相同地址的多个 BlockContent,并通过串联其载荷来重组它们。每个块的重组大小始终与相应 Allocation 的大小字段相匹配。
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
address |
uint64
|
相应内存块的地址。 |
2 |
contents |
vector<uint8>
|
载荷。 |
CollectorDownloadStoredSnapshotRequest 资源
在 fuchsia.memory.heapdump.client/client.fidl 中定义
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
snapshot_id |
uint32
|
要下载的快照的标识符。 可以使用 ListStoredSnapshots 检索可用快照的列表。 必选。 |
2 |
receiver |
SnapshotReceiver
|
所请求快照的元素将发送到的位置。 必选。 |
CollectorListStoredSnapshotsRequest 资源
在 fuchsia.memory.heapdump.client/client.fidl 中定义
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
iterator |
server_end<StoredSnapshotIterator>
|
StoredSnapshotIterator 的 server_end,将用于检索结果。 必选。 |
2 |
process_selector |
ProcessSelector
|
如果存在,则仅检索引用匹配进程的快照。 |
CollectorTakeLiveSnapshotRequest 资源
在 fuchsia.memory.heapdump.client/client.fidl 中定义
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
process_selector |
ProcessSelector
|
要运行的插桩进程。 必选。 |
2 |
receiver |
SnapshotReceiver
|
所请求快照的元素将发送到的位置。 必选。 |
3 |
with_contents |
bool
|
快照是否应包含每个内存块的内容。 如果未设置,则假定为 false。 |
可执行区域
在 fuchsia.memory.heapdump.client/client.fidl 中定义
包含从 ELF 文件加载的代码的内存区域。
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
address |
uint64
|
内存区域的地址。 |
2 |
size |
uint64
|
区域大小(以字节为单位)。 |
3 |
file_offset |
uint64
|
对应于区域内第一个字节的文件偏移量。 |
4 |
build_id |
BuildId
|
ELF 文件的 build ID。 |
堆栈轨迹
在 fuchsia.memory.heapdump.client/client.fidl 中定义
堆栈轨迹。
为避免超出通道的消息大小上限,可以将堆栈轨迹拆分为多个区块。接收器应准备好使用相同的键处理多个 StackTrace 元素,并通过串联其程序地址来重新组装这些元素。
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
stack_trace_key |
StackTraceKey
|
一个数字,用于唯一标识父快照中的此堆栈轨迹。 |
2 |
program_addresses |
vector<uint64>
|
与每帧堆栈对应的程序计数器。 条目按反向调用顺序列出:第一个条目引用叶帧,最后一个条目引用调用堆栈根目录下的帧。 |
StoredSnapshot
在 fuchsia.memory.heapdump.client/client.fidl 中定义
存储在设备上且可下载的快照。
应用启动的快照属于此类别。
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
snapshot_id |
uint32
|
一个数字,用于在收集器中唯一标识此快照。 |
2 |
snapshot_name |
string[32]
|
为此快照指定的名称。 |
3 |
process_koid |
zx/Koid
|
此快照所引用进程的 koid。 |
4 |
process_name |
string[32]
|
此快照所引用的进程的名称。 |
会话信息
在 fuchsia.memory.heapdump.client/client.fidl 中定义
有关给定线程的信息。
注意:在某些情况下,给定 koid 可能会有多个条目(例如,如果线程在不同分配之间更改了名称)。
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
thread_info_key |
ThreadInfoKey
|
用于在父快照中唯一标识此条目的数字。 |
2 |
koid |
zx/Koid
|
此条目引用的线程的 koid。 |
3 |
name |
string[32]
|
此条目引用的线程的名称。 |
联合
ProcessSelector 柔性
在 fuchsia.memory.heapdump.client/client.fidl 中定义
将某项操作限制为部分可用进程的过滤器。
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
by_name |
string[32]
|
匹配任何具有给定 ZX_PROP_NAME 的进程。 |
2 |
by_koid |
zx/Koid
|
将进程与指定的 koid 相匹配。 |
SnapshotElement 灵活
在 fuchsia.memory.heapdump.client/client.fidl 中定义
属于快照的元素。
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
allocation |
Allocation
|
|
2 |
stack_trace |
StackTrace
|
|
3 |
executable_region |
ExecutableRegion
|
|
4 |
block_contents |
BlockContents
|
|
5 |
thread_info |
ThreadInfo
|
StoredSnapshotIterator_GetNext_Result 严格
在 fuchsia.memory.heapdump.client/client.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
StoredSnapshotIterator_GetNext_Response
|
|
2 |
err |
CollectorError
|
常量
名称 | 值 | 类型 | 说明 |
---|---|---|---|
MAX_BUILD_ID_LENGTH |
32
|
uint32 |
别名
名称 | 值 | 说明 |
---|---|---|
StackTraceKey |
uint64 |
|
ThreadInfoKey |
uint64 |