总结
读取线程状态的一个方面。
声明
#include <zircon/syscalls.h>
zx_status_t zx_thread_read_state(zx_handle_t handle,
uint32_t kind,
void* buffer,
size_t buffer_size);
说明
zx_thread_read_state()
会读取线程状态的一个方面。只有在线程因异常而停止或线程挂起时,才能读取线程状态。
线程状态与处理器高度相关。如需了解各个平台上的结构内容,请参阅 zircon/syscalls/debug.h 中的结构。
省/自治区/直辖市
ZX_THREAD_STATE_GENERAL_REGS
缓冲区必须指向包含当前架构的通用寄存器的 zx_thread_state_general_regs_t
结构。
ZX_THREAD_STATE_FP_REGS
缓冲区必须指向 zx_thread_state_fp_regs_t
结构。在 64 位 ARM 平台上,浮点状态位于矢量寄存器中,且此结构为空。
ZX_THREAD_STATE_VECTOR_REGS
缓冲区必须指向 zx_thread_state_vector_regs_t
结构。
ZX_THREAD_STATE_DEBUG_REGS
缓冲区必须指向 zx_thread_state_debug_regs_t
结构。所有输入字段都将被忽略,并替换为线程的实际值。
ZX_THREAD_STATE_SINGLE_STEP
缓冲区必须指向 zx_thread_state_single_step_t
值,该值可以包含 0(正常运行)或 1(启用单步)。
权限
handle 必须为 ZX_OBJ_TYPE_THREAD
类型,且具有 ZX_RIGHT_READ
。
返回值
zx_thread_read_state()
会在成功时返回 ZX_OK
。如果失败,则返回负数错误值。
错误
ZX_ERR_BAD_HANDLE
句柄不是有效的句柄。
ZX_ERR_WRONG_TYPE
句柄不是线程的句柄。
ZX_ERR_ACCESS_DENIED
句柄缺少 ZX_RIGHT_READ
。
ZX_ERR_INVALID_ARGS
种类无效,或 buffer 是无效的指针。
ZX_ERR_NO_MEMORY
由于内存不足而失败。
用户空间没有什么方法来处理此(不太可能)错误。在以后的 build 中,此错误不会再发生。
ZX_ERR_BUFFER_TOO_SMALL
缓冲区长度 buffer_size 太小,无法储存 Kind 所需的数据。
ZX_ERR_BAD_STATE
:线程未在状态可用的点停止。只有当线程因异常而停止时,才能读取线程状态。
不支持 ZX_ERR_NOT_SUPPORTED
种类。例如,在尝试读取当前运行程序的硬件不支持的寄存器集时,可能会发生这种情况。