摘要
從核心偵錯記錄檔讀取單一記錄檔記錄。
宣告
#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_size 個位元組的 buffer。
options 必須設為 0
。
成功時,系統會將 zx_log_record_t
類型的單一記錄寫入至
buffer。記錄長度 (以位元組為單位) 則以 Syscall 的
傳回值。
傳回的記錄將採用以下格式:
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 。 |
時間戳記 | 說明首次寫入這筆記錄時間的時間戳記。 |
pid | 寫入此記錄檔記錄的程序失敗,或
如果記錄是由核心產生,則為 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
帳號代碼不是有效的帳號代碼。
ZX_ERR_INVALID_ARGS
為 options 輸入的值無效,或 buffer
是無效的指標
ZX_ERR_SHOULD_WAIT
偵錯記錄沒有可讀取的記錄。
ZX_ERR_WRONG_TYPE
處理常式不是偵錯記錄控制代碼。