摘要
从内核调试日志中读取单条日志记录。
声明
#include <zircon/syscalls.h>
zx_status_t zx_debuglog_read(zx_handle_t handle,
uint32_t options,
void* buffer,
size_t buffer_size);
说明
zx_debuglog_read()
尝试从内核调试中读取单条记录
登录到给定的 buffer,大小为 buffer_size 字节。
options 必须设置为 0
。
成功后,zx_log_record_t
类型的一条记录将写入到
缓冲区。系统调用的
返回值。
返回的记录将采用以下格式:
typedef struct zx_log_record {
uint64_t sequence;
uint32_t unused;
uint16_t datalen;
uint8_t severity;
uint8_t flags;
zx_time_t timestamp;
uint64_t pid;
uint64_t tid;
char data[];
} zx_log_record_t;
这些字段的定义如下:
字段 | 说明 |
---|---|
序列 | 此记录的序列号。每条记录的顺序: 数字比上述记录大 1。序列 从 0 开始。序列候选者丢弃的记录中的缺口 记录。 |
datalen | data 字段中的数据字节数。 |
严重程度 | 此日志消息的严重性。标准严重级别为
在标头 zircon/syscalls/log.h 中定义。 |
标志 | 与此邮件相关的额外标志。标志在
标头 zircon/syscalls/log.h 。 |
timestamp | 描述此记录首次写入时间的时间戳。 |
pid | 写入此日志记录的进程的 Koid,或
如果记录由内核生成,则为 ZX_KOID_INVALID ; |
tid | 写入此日志记录的线程的 Koid,或
如果记录由内核生成,则为 ZX_KOID_INVALID ; |
数据 | 日志消息,由 datalen 字节组成。日志 消息可能包含嵌入的 NUL 字符,且不是 必须以 NUL 终止。 |
如果 buffer_size 小于日志记录的大小,则第一个
记录的 buffer_size 字节将写入缓冲区,其余字节将写入缓冲区
已舍弃。调用方应确保其输入缓冲区至少
ZX_LOG_RECORD_MAX
个字节,以避免日志记录被截断。
权限
handle 的类型必须为 ZX_OBJ_TYPE_LOG
且包含 ZX_RIGHT_READ
。
返回值
zx_debuglog_read()
在成功时返回非负值,表示操作成功
写入缓冲区的字节数。失败时,错误值为负值
。
错误
ZX_ERR_ACCESS_DENIED
句柄没有 ZX_RIGHT_READ
。
ZX_ERR_BAD_HANDLE
handle 不是有效的句柄。
ZX_ERR_INVALID_ARGS
为 options 或 buffer 指定的值无效
是无效的指针。
ZX_ERR_SHOULD_WAIT
调试日志未包含要读取的记录。
ZX_ERR_WRONG_TYPE
handle 不是调试日志句柄。