Sanitizer 回调 API
实现 Sanitizer 回调 API 的函数、类型和枚举。
枚举
- Sanitizer_ApiCallbackSite
指定在 API 调用中发出回调的点。
- Sanitizer_BatchMemopType
指定批量内存操作的类型。
- Sanitizer_CallackIdSync
同步域的回调 ID。
- Sanitizer_CallbackDomain
回调域。
- Sanitizer_CallbackIdBatchMemop
批量内存操作域的回调 ID。
- Sanitizer_CallbackIdEvents
事件域的回调 ID。
- Sanitizer_CallbackIdExternalMemory
外部内存域的回调 ID。
- Sanitizer_CallbackIdGraphs
图域的回调 ID。
- Sanitizer_CallbackIdLaunch
启动域的回调 ID。
- Sanitizer_CallbackIdMemcpy
内存复制域的回调 ID。
- Sanitizer_CallbackIdMemset
内存设置域的回调 ID。
- Sanitizer_CallbackIdResource
资源域的回调 ID。
- Sanitizer_CallbackIdUvm
托管内存域的回调 ID。
- Sanitizer_MemcpyDirection
内存复制方向。
- Sanitizer_MemoryVisibility
指定分配的可见性。
- Sanitizer_ResourceMemoryFlags
描述内存分配的标志。
- Sanitizer_ResourceMemoryPermissions
内存分配的权限。
函数
- SanitizerResult sanitizerEnableAllDomains(uint32_t enable, Sanitizer_SubscriberHandle subscriber)
启用或禁用所有域中的所有回调。
- SanitizerResult sanitizerEnableCallback(uint32_t enable, Sanitizer_SubscriberHandle subscriber, Sanitizer_CallbackDomain domain, Sanitizer_CallbackId cbid)
启用或禁用特定域和回调 ID 的回调。
- SanitizerResult sanitizerEnableDomain(uint32_t enable, Sanitizer_SubscriberHandle subscriber, Sanitizer_CallbackDomain domain)
启用或禁用特定域的所有回调。
- SanitizerResult sanitizerGetCallbackState(uint32_t *enable, Sanitizer_SubscriberHandle subscriber, Sanitizer_CallbackDomain domain, Sanitizer_CallbackId cbid)
获取特定域和函数 ID 的回调的当前启用/禁用状态。
- SanitizerResult sanitizerSubscribe(Sanitizer_SubscriberHandle *subscriber, Sanitizer_CallbackFunc callback, void *userdata)
使用回调函数和用户数据初始化回调订阅者。
- SanitizerResult sanitizerUnsubscribe(Sanitizer_SubscriberHandle subscriber)
注销回调订阅者。
结构体
- Sanitizer_BatchMemopData
传递到批量内存操作回调函数的数据。
- Sanitizer_CallbackData
传递到运行时或驱动程序 API 回调函数的数据。
- Sanitizer_EventData
传递到事件回调函数的数据。
- Sanitizer_ExternalMemoryData
传递到外部内存回调函数的数据。
- Sanitizer_GraphExecData
传递到 graphexec 创建回调函数的数据。
- Sanitizer_GraphLaunchData
传递到图启动回调函数的数据。
- Sanitizer_GraphNodeLaunchData
传递到图节点启动回调函数的数据。
- Sanitizer_LaunchData
传递到启动回调函数的数据。
- Sanitizer_MemcpyData
传递到内存复制回调函数的数据。
- Sanitizer_MemsetData
传递到内存设置回调函数的数据。
- Sanitizer_ResourceArrayData
传递到 CUDA 数组回调函数的数据。
- Sanitizer_ResourceContextData
传递到上下文资源回调函数的数据。
- Sanitizer_ResourceFunctionsLazyLoadedData
传递到 CUDA 函数回调函数的数据。
- Sanitizer_ResourceMemoryData
传递到内存资源回调函数的数据。
- Sanitizer_ResourceMempoolData
传递到内存池资源回调函数的数据。
- Sanitizer_ResourceModuleData
传递到模块资源回调函数的数据。
- Sanitizer_ResourceStreamData
传递到流资源回调函数的数据。
- Sanitizer_ResourceVirtualRange
传递到 VA 预留回调函数的数据。
- Sanitizer_SynchronizeData
传递到同步回调函数的数据。
- Sanitizer_UvmData
传递到托管内存回调函数的数据。
类型定义
- Sanitizer_CallbackFunc
回调的函数类型。
- Sanitizer_CallbackId
回调 ID。
- Sanitizer_SubscriberHandle
一个回调订阅者。
枚举
-
enum Sanitizer_ApiCallbackSite
指定在 API 调用中发出回调的点。
指定在 API 中发出回调的点。此值通过 Sanitizer_CallbackData::CallbackSize 传递给回调函数。
值
-
enumerator SANITIZER_API_ENTER
此回调位于 API 入口。
-
enumerator SANITIZER_API_EXIT
此回调位于 API 出口。
-
enumerator SANITIZER_API_CBSITE_FORCE_INT
-
enumerator SANITIZER_API_ENTER
-
enum Sanitizer_BatchMemopType
指定批量内存操作的类型。
指定域 SANITIZER_CB_DOMAIN_BATCH_MEMOP 中回调报告的批量内存操作类型。此值通过 Sanitizer_BatchMemopData::type 传递给回调函数。
值
-
enumerator SANITIZER_BATCH_MEMOP_TYPE_32B
批量内存操作大小为 32 位。
-
enumerator SANITIZER_BATCH_MEMOP_TYPE_64B
批量内存操作大小为 64 位。
-
enumerator SANITIZER_BATCH_MEMOP_TYPE_FORCE_INT
-
enumerator SANITIZER_BATCH_MEMOP_TYPE_32B
-
enum Sanitizer_CallackIdSync
同步域的回调 ID。
资源域 SANITIZER_CB_DOMAIN_SYNCHRONIZE 的回调 ID。此值通过
cbid
参数传递给回调函数。值
-
enumerator SANITIZER_CBID_SYNCHRONIZE_INVALID
无效的同步回调 ID。
-
enumerator SANITIZER_CBID_SYNCHRONIZE_STREAM_SYNCHRONIZED
给定流的流同步已完成。
-
enumerator SANITIZER_CBID_SYNCHRONIZE_CONTEXT_SYNCHRONIZED
给定上下文的上下文同步已完成。
-
enumerator SANITIZER_CBID_SYNCHRONIZE_SIZE
-
enumerator SANITIZER_CBID_SYNCHRONIZE_FORCE_INT
-
enumerator SANITIZER_CBID_SYNCHRONIZE_INVALID
-
enum Sanitizer_CallbackDomain
回调域。
回调域。每个域代表一组相关 API 函数或 CUDA 驱动程序活动的回调点。
值
-
enumerator SANITIZER_CB_DOMAIN_INVALID
无效域。
-
enumerator SANITIZER_CB_DOMAIN_DRIVER_API
包含所有驱动程序 API 函数的回调点的域。
-
enumerator SANITIZER_CB_DOMAIN_RUNTIME_API
包含所有运行时 API 函数的回调点的域。
-
enumerator SANITIZER_CB_DOMAIN_RESOURCE
包含 CUDA 资源跟踪的回调点的域。
-
enumerator SANITIZER_CB_DOMAIN_SYNCHRONIZE
包含 CUDA 同步的回调点的域。
-
enumerator SANITIZER_CB_DOMAIN_LAUNCH
包含 CUDA 网格启动的回调点的域。
-
enumerator SANITIZER_CB_DOMAIN_MEMCPY
包含 CUDA 内存复制操作的回调点的域。
-
enumerator SANITIZER_CB_DOMAIN_MEMSET
包含 CUDA 内存设置操作的回调点的域。
-
enumerator SANITIZER_CB_DOMAIN_BATCH_MEMOP
包含 CUDA 批量内存操作的回调点的域。
-
enumerator SANITIZER_CB_DOMAIN_UVM
包含 CUDA 托管内存操作的回调点的域。
-
enumerator SANITIZER_CB_DOMAIN_GRAPHS
包含 CUDA 图操作的回调点的域。
-
enumerator SANITIZER_CB_DOMAIN_EVENTS
包含 CUDA 事件的回调点的域。
-
enumerator SANITIZER_CB_DOMAIN_EXTERNAL_MEMORY
包含 CUDA 外部内存的回调点的域。
-
enumerator SANITIZER_CB_DOMAIN_SIZE
-
enumerator SANITIZER_CB_DOMAIN_FORCE_INT
-
enumerator SANITIZER_CB_DOMAIN_INVALID
-
enum Sanitizer_CallbackIdBatchMemop
批量内存操作域的回调 ID。
资源域 SANITIZER_CB_DOMAIN_BATCH_MEMOP 的回调 ID。此值通过
cbid
参数传递给回调函数。值
-
enumerator SANITIZER_CBID_BATCH_MEMOP_INVALID
无效的批量内存操作回调 ID。
-
enumerator SANITIZER_CBID_BATCH_MEMOP_WRITE
已启动批量内存操作。
-
enumerator SANITIZER_CBID_BATCH_MEMOP_SIZE
-
enumerator SANITIZER_CBID_BATCH_MEMOP_FORCE_INT
-
enumerator SANITIZER_CBID_BATCH_MEMOP_INVALID
-
enum Sanitizer_CallbackIdEvents
事件域的回调 ID。
资源域 SANITIZER_CB_DOMAIN_EVENTS 的回调 ID。此值通过
cbid
参数传递给回调函数。在驱动程序版本 515 或更高版本中可用。值
-
enumerator SANITIZER_CBID_EVENTS_INVALID
无效的事件回调 ID。
-
enumerator SANITIZER_CBID_EVENTS_CREATED
已创建事件。
-
enumerator SANITIZER_CBID_EVENTS_DESTROYED
已销毁事件。
-
enumerator SANITIZER_CBID_EVENTS_RECORD
已记录事件。
-
enumerator SANITIZER_CBID_EVENTS_STREAM_WAIT
流已同步到事件。
-
enumerator SANITIZER_CBID_EVENTS_SYNCHRONIZE
事件已同步。
-
enumerator SANITIZER_CBID_EVENTS_SIZE
-
enumerator SANITIZER_CBID_EVENTS_FORCE_INT
-
enumerator SANITIZER_CBID_EVENTS_INVALID
-
enum Sanitizer_CallbackIdExternalMemory
外部内存域的回调 ID。
资源域 SANITIZER_CB_DOMAIN_EXTERNAL_MEMORY 的回调 ID。此值通过
cbid
参数传递给回调函数。在驱动程序版本 535 或更高版本中可用。值
-
enumerator SANITIZER_CBID_EXTERNAL_MEMORY_INVALID
无效的外部内存回调 ID。
-
enumerator SANITIZER_CBID_EXTERNAL_MEMORY_IMPORT
已导入外部内存。
-
enumerator SANITIZER_CBID_EXTERNAL_MEMORY_MAPPED
已映射外部内存。
-
enumerator SANITIZER_CBID_EXTERNAL_MEMORY_DESTROYED
已销毁外部内存。
-
enumerator SANITIZER_CBID_EXTERNAL_MEMORY_SIZE
-
enumerator SANITIZER_CBID_EXTERNAL_MEMORY_FORCE_INT
-
enumerator SANITIZER_CBID_EXTERNAL_MEMORY_INVALID
-
enum Sanitizer_CallbackIdGraphs
图域的回调 ID。
资源域 SANITIZER_CB_DOMAIN_GRAPHS 的回调 ID。此值通过
cbid
参数传递给回调函数。值
-
enumerator SANITIZER_CBID_GRAPHS_INVALID
无效的图回调 ID。
-
enumerator SANITIZER_CBID_GRAPHS_GRAPHEXEC_CREATING
正在创建新的 graphexec。
-
enumerator SANITIZER_CBID_GRAPHS_GRAPHEXEC_CREATED
已创建新的 graphexec。
-
enumerator SANITIZER_CBID_GRAPHS_GRAPHEXEC_DESTROYING
正在销毁 graphexec。
-
enumerator SANITIZER_CBID_GRAPHS_NODE_LAUNCH_BEGIN
已启动节点启动。
-
enumerator SANITIZER_CBID_GRAPHS_NODE_LAUNCH_END
节点启动已完成。
-
enumerator SANITIZER_CBID_GRAPHS_LAUNCH_BEGIN
图形启动已发起。
-
enumerator SANITIZER_CBID_GRAPHS_LAUNCH_END
图形启动已完成。
-
enumerator SANITIZER_CBID_GRAPHS_SIZE
-
enumerator SANITIZER_CBID_GRAPHS_FORCE_INT
-
enumerator SANITIZER_CBID_GRAPHS_INVALID
-
enum Sanitizer_CallbackIdLaunch
启动域的回调 ID。
用于资源域 SANITIZER_CB_DOMAIN_LAUNCH 的回调 ID。此值通过
cbid
参数传递给回调函数。值
-
enumerator SANITIZER_CBID_LAUNCH_INVALID
无效的启动回调 ID。
-
enumerator SANITIZER_CBID_LAUNCH_BEGIN
网格启动已发起。
-
enumerator SANITIZER_CBID_LAUNCH_AFTER_SYSCALL_SETUP
网格启动已完成系统调用设置。
-
enumerator SANITIZER_CBID_LAUNCH_END
网格启动已完成。
-
enumerator SANITIZER_CBID_LAUNCH_SIZE
-
enumerator SANITIZER_CBID_LAUNCH_FORCE_INT
-
enumerator SANITIZER_CBID_LAUNCH_INVALID
-
enum Sanitizer_CallbackIdMemcpy
内存复制域的回调 ID。
用于资源域 SANITIZER_CB_DOMAIN_MEMCPY 的回调 ID。此值通过
cbid
参数传递给回调函数。值
-
enumerator SANITIZER_CBID_MEMCPY_INVALID
无效的 memcpy 回调 ID。
-
enumerator SANITIZER_CBID_MEMCPY_STARTING
memcpy 操作已发起。
-
enumerator SANITIZER_CBID_MEMCPY_SIZE
-
enumerator SANITIZER_CBID_MEMCPY_FORCE_INT
-
enumerator SANITIZER_CBID_MEMCPY_INVALID
-
enum Sanitizer_CallbackIdMemset
内存设置域的回调 ID。
用于资源域 SANITIZER_CB_DOMAIN_MEMSET 的回调 ID。此值通过
cbid
参数传递给回调函数。值
-
enumerator SANITIZER_CBID_MEMSET_INVALID
无效的 memset 回调 ID。
-
enumerator SANITIZER_CBID_MEMSET_STARTING
memset 操作已发起。
-
enumerator SANITIZER_CBID_MEMSET_SIZE
-
enumerator SANITIZER_CBID_MEMSET_FORCE_INT
-
enumerator SANITIZER_CBID_MEMSET_INVALID
-
enum Sanitizer_CallbackIdResource
资源域的回调 ID。
用于资源域 SANITIZER_CB_DOMAIN_RESOURCE 的回调 ID。此值通过
cbid
参数传递给回调函数。值
-
enumerator SANITIZER_CBID_RESOURCE_INVALID
无效的资源回调 ID。
-
enumerator SANITIZER_CBID_RESOURCE_INIT_FINISHED
驱动程序初始化已完成。
-
enumerator SANITIZER_CBID_RESOURCE_CONTEXT_CREATION_STARTING
新上下文即将被创建。
-
enumerator SANITIZER_CBID_RESOURCE_CONTEXT_CREATION_FINISHED
新上下文已创建。
-
enumerator SANITIZER_CBID_RESOURCE_CONTEXT_DESTROY_STARTING
上下文即将被销毁。
-
enumerator SANITIZER_CBID_RESOURCE_CONTEXT_DESTROY_FINISHED
上下文已销毁。
-
enumerator SANITIZER_CBID_RESOURCE_STREAM_CREATED
新流已创建。
-
enumerator SANITIZER_CBID_RESOURCE_STREAM_DESTROY_STARTING
流即将被销毁。
-
enumerator SANITIZER_CBID_RESOURCE_STREAM_DESTROY_FINISHED
流已销毁。
-
enumerator SANITIZER_CBID_RESOURCE_MODULE_LOADED
模块已加载。
-
enumerator SANITIZER_CBID_RESOURCE_MODULE_UNLOAD_STARTING
模块即将被卸载。
-
enumerator SANITIZER_CBID_RESOURCE_DEVICE_MEMORY_ALLOC
设备内存已分配。
-
enumerator SANITIZER_CBID_RESOURCE_DEVICE_MEMORY_FREE
设备内存已释放。
-
enumerator SANITIZER_CBID_RESOURCE_HOST_MEMORY_ALLOC
锁页主机内存已分配。
-
enumerator SANITIZER_CBID_RESOURCE_HOST_MEMORY_FREE
锁页主机内存已释放。
-
enumerator SANITIZER_CBID_RESOURCE_MEMORY_ALLOC_ASYNC
内存已异步分配。
-
enumerator SANITIZER_CBID_RESOURCE_MEMORY_FREE_ASYNC
内存已异步释放。
-
enumerator SANITIZER_CBID_RESOURCE_MEMORY_FREE_ASYNC_DONE
异步释放的内存已被释放,仅当常规分配 (cudaMalloc) 被异步释放 (cudaFreeAsync) 时发生。
有关 cudaFreeAsync 的信息,请参阅 CUDA 运行时文档
-
enumerator SANITIZER_CBID_RESOURCE_MEMPOOL_CREATED
新建内存池已创建。
-
enumerator SANITIZER_CBID_RESOURCE_MEMPOOL_DESTROYING
内存池即将被销毁。
-
enumerator SANITIZER_CBID_RESOURCE_MEMPOOL_PEER_ACCESS_ENABLED
内存池现在可以从对等设备访问。
-
enumerator SANITIZER_CBID_RESOURCE_MEMPOOL_PEER_ACCESS_DISABLING
内存池不再可以从对等设备访问。
-
enumerator SANITIZER_CBID_RESOURCE_ARRAY_CREATED
CUDA 数组已创建。
-
enumerator SANITIZER_CBID_RESOURCE_ARRAY_DESTROYED
CUDA 数组已销毁。
-
enumerator SANITIZER_CBID_RESOURCE_FUNCTIONS_LAZY_LOADED
CUDA 函数已延迟加载,并且已完全加载。
-
enumerator SANITIZER_CBID_RESOURCE_FUNCTIONS_LAZY_PATCHED
CUDA 延迟加载的函数已被修补。
-
enumerator SANITIZER_CBID_RESOURCE_VIRTUAL_RESERVE
CUDA 驱动程序保留了一个虚拟地址范围。
-
enumerator SANITIZER_CBID_RESOURCE_VIRTUAL_RELEASE
CUDA 驱动程序释放了一个虚拟地址范围。
-
enumerator SANITIZER_CBID_RESOURCE_MEMPOOL_IMPORT_POINTER
内存池分配已被导入。
-
enumerator SANITIZER_CBID_RESOURCE_SIZE
-
enumerator SANITIZER_CBID_RESOURCE_FORCE_INT
-
enumerator SANITIZER_CBID_RESOURCE_INVALID
-
enum Sanitizer_CallbackIdUvm
托管内存域的回调 ID。
用于资源域 SANITIZER_CB_DOMAIN_UVM 的回调 ID。此值通过
cbid
参数传递给回调函数。值
-
enumerator SANITIZER_CBID_UVM_INVALID
无效的托管内存回调 ID。
-
enumerator SANITIZER_CBID_UVM_ATTACH_MEM
修改分配的流关联 (参见 cudaStreamAttachMemAsync)。
-
enumerator SANITIZER_CBID_UVM_SIZE
-
enumerator SANITIZER_CBID_UVM_FORCE_ITN
-
enumerator SANITIZER_CBID_UVM_INVALID
-
enum Sanitizer_MemcpyDirection
内存复制方向。
指示 memcpy 的方向,在
Sanitizer_Memcpydata
中传递。值
-
enumerator SANITIZER_MEMCPY_DIRECTION_UNKNOWN
未知的 memcpy 方向。
-
enumerator SANITIZER_MEMCPY_DIRECTION_HOST_TO_HOST
从主机到主机的 memcpy。
-
enumerator SANITIZER_MEMCPY_DIRECTION_HOST_TO_DEVICE
从主机到设备的 memcpy。
-
enumerator SANITIZER_MEMCPY_DIRECTION_DEVICE_TO_HOST
从设备到主机的 memcpy。
-
enumerator SANITIZER_MEMCPY_DIRECTION_DEVICE_TO_DEVICE
从设备到设备的 memcpy。
-
enumerator SANITIZER_MEMCPY_DIRECTION_SIZE
-
enumerator SANITIZER_MEMCPY_DIRECTION_FORCE_INT
-
enumerator SANITIZER_MEMCPY_DIRECTION_UNKNOWN
-
enum Sanitizer_MemoryVisibility
指定分配的可见性。
指定分配的可见性。这通常对于通过 cudaMalloc、cudaHostAlloc 和类似的 API 进行的分配是 GLOBAL。对于 cudaMallocManaged 分配,根据标志参数,这可以是 GLOBAL 或 HOST。可以使用 cudaMemAttachSingle API 在分配后更改此设置(请参阅 SANITIZER_CBID_UVM_ATTACH_MEM 以获取相应的回调)。
值
-
enumerator SANITIZER_MEMORY_VISIBILITY_INVALID
无效的内存可见性。
-
enumerator SANITIZER_MEMORY_VISIBILITY_GLOBAL
内存可以被任何设备上的任何流访问(参见 cudaMemAttachGlobal)
-
enumerator SANITIZER_MEMORY_VISIBILITY_HOST
内存不能被任何设备上的任何流访问(参见 cudaMemAttachHost)
-
enumerator SANITIZER_MEMORY_VISIBILITY_STREAM
内存只能被关联设备上的单个流访问(参见 cudaMemAttachSingle)
-
enumerator SANITIZER_MEMORY_VISIBILITY_FORCE_INT
-
enumerator SANITIZER_MEMORY_VISIBILITY_INVALID
-
enum Sanitizer_ResourceMemoryFlags
描述内存分配的标志。
描述内存分配的标志。这些值用于解释 Sanitizer_ResourceMemoryData::flags 的值。
值
-
enumerator SANITIZER_MEMORY_FLAG_NONE
空标志。
-
enumerator SANITIZER_MEMORY_FLAG_MODULE
指定分配是静态作用域到模块的。
-
enumerator SANITIZER_MEMORY_FLAG_MANAGED
指定分配是托管内存。
-
enumerator SANITIZER_MEMORY_FLAG_HOST_MAPPED
指定分配可以从主机访问。
-
enumerator SANITIZER_MEMORY_FLAG_HOST_PINNED
指定分配在主机上是已锁定的。
-
enumerator SANITIZER_MEMORY_FLAG_PEER
指定分配位于对等 GPU 上。
-
enumerator SANITIZER_MEMORY_FLAG_PEER_ATOMIC
指定分配位于支持原生原子操作的对等 GPU 上。
这也意味着设置了 SANITIZER_MEMORY_FLAG_PEER。
-
enumerator SANITIZER_MEMORY_FLAG_CG_RUNTIME
指定分配被 Cooperative Groups 运行时函数使用。
-
enumerator SANITIZER_MEMORY_FLAG_CNP
指定这是一个用于 CUDA 动态并行目的的分配。
-
enumerator SANITIZER_MEMORY_FLAG_FORCE_INT
-
enumerator SANITIZER_MEMORY_FLAG_NONE
-
enum Sanitizer_ResourceMemoryPermissions
内存分配的权限。
内存分配的权限。这些值用于解释 Sanitizer_ResourceMemoryData::permissions 的值。
值
-
enumerator SANITIZER_MEMORY_PERMISSION_NONE
无权限。
-
enumerator SANITIZER_MEMORY_PERMISSION_READ
指定分配是可读的。
-
enumerator SANITIZER_MEMORY_PERMISSION_WRITE
指定分配是可写的。
-
enumerator SANITIZER_MEMORY_PERMISSION_ATOMIC
指定分配是可读/写的,并支持原子操作。
-
enumerator SANITIZER_MEMORY_PERMISSION_ALL
指定分配拥有所有权限。
-
enumerator SANITIZER_MEMORY_PERMISSION_FORCE_INT
-
enumerator SANITIZER_MEMORY_PERMISSION_NONE
函数
-
SanitizerResult sanitizerEnableAllDomains(uint32_t enable, Sanitizer_SubscriberHandle subscriber)
启用或禁用所有域中的所有回调。
启用或禁用所有域中的所有回调。
注意
线程安全
:订阅者必须序列化对 sanitizerGetCallbackState、sanitizerEnableCallback、sanitizerEnableDomain 和 sanitizerEnableAllDomains 的访问。例如,如果并发调用 sanitizerGetCallbackState(sub,
d, *) 和 sanitizerEnableAllDomains(sub),则结果未定义。
- 参数
enable – 所有域中所有回调的新启用状态。零禁用所有回调,非零启用所有回调。
subscriber – - 已初始化订阅者的句柄
- 返回值
SANITIZER_SUCCESS – 成功时
SANITIZER_ERROR_NOT_INITIALIZED – 如果无法初始化 Sanitizer
SANITIZER_ERROR_INVALID_PARAMETER – 如果
subscriber
无效
-
SanitizerResult sanitizerEnableCallback(uint32_t enable, Sanitizer_SubscriberHandle subscriber, Sanitizer_CallbackDomain domain, Sanitizer_CallbackId cbid)
启用或禁用特定域和回调 ID 的回调。
为特定域和回调 ID 的订阅者启用或禁用回调。
注意
线程安全
:订阅者必须序列化对 sanitizerGetCallbackState、sanitizerEnableCallback、sanitizerEnableDomain 和 sanitizerEnableAllDomains 的访问。例如,如果并发调用 sanitizerGetCallbackState(sub, d,
c) 和 sanitizerEnableCallback(sub, d, c),则结果未定义。
- 参数
enable – 回调的新启用状态。零禁用回调,非零启用回调
subscriber – - 已初始化订阅者的句柄
domain – 回调的域
cbid – 回调的 ID
- 返回值
SANITIZER_SUCCESS – 成功时
SANITIZER_ERROR_NOT_INITIALIZED – 如果无法初始化 Sanitizer
SANITIZER_ERROR_INVALID_PARAMETER – 如果
subscriber
,domain
或cbid
无效
-
SanitizerResult sanitizerEnableDomain(uint32_t enable, Sanitizer_SubscriberHandle subscriber, Sanitizer_CallbackDomain domain)
启用或禁用特定域的所有回调。
启用或禁用特定域的所有回调。
注意
线程安全
:订阅者必须序列化对 sanitizerGetCallbackState、sanitizerEnableCallback、sanitizerEnableDomain 和 sanitizerEnableAllDomains 的访问。例如,如果并发调用 sanitizerGetCallbackEnabled(sub,
d, *) 和 sanitizerEnableDomain(sub, d),则结果未定义。
- 参数
enable – 域中所有回调的新启用状态。零禁用所有回调,非零启用所有回调
subscriber – - 已初始化订阅者的句柄
domain – 回调的域
- 返回值
SANITIZER_SUCCESS – 成功时
SANITIZER_ERROR_NOT_INITIALIZED – 如果无法初始化 Sanitizer
SANITIZER_ERROR_INVALID_PARAMETER – 如果
subscriber
或domain
无效
-
SanitizerResult sanitizerGetCallbackState(uint32_t *enable, Sanitizer_SubscriberHandle subscriber, Sanitizer_CallbackDomain domain, Sanitizer_CallbackId cbid)
获取特定域和函数 ID 的回调的当前启用/禁用状态。
如果域和回调 ID 的回调已启用,则在
*enable
中返回非零值,如果未启用则返回零。注意
线程安全
:订阅者必须序列化对 sanitizerGetCallbackState、sanitizerEnableCallback、sanitizerEnableDomain 和 sanitizerEnableAllDomains 的访问。例如,如果并发调用 sanitizerGetCallbackState(sub, d,
c) 和 sanitizerEnableCallback(sub, d, c),则结果未定义。
- 参数
enable – 如果回调已启用,则返回非零值,如果未启用,则返回零
subscriber – 已初始化订阅者的句柄
domain – 回调的域
cbid – 回调的 ID
- 返回值
SANITIZER_SUCCESS – 成功时
SANITIZER_ERROR_NOT_INITIALIZED – 如果无法初始化 Sanitizer
SANITIZER_ERROR_INVALID_PARAMETER – 如果
enabled
为 NULL,或者如果subscriber
,domain
或cbid
无效。
-
SanitizerResult sanitizerSubscribe(Sanitizer_SubscriberHandle *subscriber, Sanitizer_CallbackFunc callback, void *userdata)
使用回调函数和用户数据初始化回调订阅者。
使用回调函数和(可选的)指向用户数据的指针初始化回调订阅者。返回的订阅者句柄可用于为特定域和回调 ID 启用和禁用回调。
注意
一次只能注册一个订阅者。
注意
此函数不启用任何回调。
注意
线程安全:此函数是线程安全的。
- 参数
subscriber – 返回初始化订阅者的句柄
callback – 回调函数
userdata – 指向用户数据的指针。此数据将通过
userdata
参数传递给回调函数
- 返回值
SANITIZER_SUCCESS – 成功时
SANITIZER_ERROR_NOT_INITIALIZED – 如果无法初始化 Sanitizer
SANITIZER_ERROR_MAX_LIMIT_RACHED – 如果已经有一个 sanitizer 订阅者
SANITIZER_ERROR_INVALID_PARAMETER – 如果
subscriber
为 NULL
-
SanitizerResult sanitizerUnsubscribe(Sanitizer_SubscriberHandle subscriber)
注销回调订阅者。
移除回调订阅者,以便将来不会向该订阅者发出任何回调。
注意
线程安全:此函数是线程安全的。
- 参数
subscriber – 已初始化订阅者的句柄
- 返回值
SANITIZER_SUCCESS – 成功时
SANITIZER_ERROR_NOT_INITIALIZED – 如果无法初始化 Sanitizer
SANITIZER_ERROR_INVALID_PARAMETER – 如果
subscriber
为 NULL 或未初始化
类型定义
-
typedef void (*Sanitizer_CallbackFunc)(void *userdata, Sanitizer_CallbackDomain domain, Sanitizer_CallbackId cbid, const void *cbdata)
回调的函数类型。
回调的函数类型。在
cbdata
中传递给回调的数据类型取决于域。如果domain
是 SANITIZER_CB_DOMAIN_DRIVER_API 或 SANITIZER_CB_DOMAIN_RUNTIME_API,则cbdata
的类型将是 Sanitizer_CallbackData。如果domain
是 SANITIZER_CB_DOMAIN_RESOURCE,则cbdata
的类型将取决于 cbid。请参阅 Sanitizer_ResourceContextData、Sanitizer_ResourceStreamData、Sanitizer_ResourceModuleData 和 Sanitizer_ResourceMemoryFlags 的文档。如果domain
是 SANITIZER_CB_DOMAIN_SYNCHRONIZE,则cbdata
的类型将是 Sanitizer_SynchronizeData。如果domain
是 SANITIZER_CB_DOMAIN_LAUNCH,则cbdata
的类型将是 Sanitizer_LaunchData。如果domain
是 SANITIZER_CB_DOMAIN_MEMCPY,则cbdata
的类型将是 Sanitizer_MemcpyData。如果domain
是 SANITIZER_CB_DOMAIN_MEMSET,则cbdata
的类型将是 Sanitizer_MemsetData。如果domain
是 SANITIZER_CB_DOMAIN_BATCH_MEMOP,则cbdata
的类型将是 Sanitizer_BatchMemopData。
-
typedef uint32_t Sanitizer_CallbackId
回调 ID。
-
typedef struct Sanitizer_Subscriber_st *Sanitizer_SubscriberHandle
一个回调订阅者。