zx_debuglog_read

摘要

從核心偵錯記錄檔讀取單一記錄檔記錄。

宣告

#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_ARGSoptions 輸入的值無效,或 buffer 是無效的指標

ZX_ERR_SHOULD_WAIT 偵錯記錄沒有可讀取的記錄。

ZX_ERR_WRONG_TYPE 處理常式不是偵錯記錄控制代碼。

另請參閱