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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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

函数

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, domaincbid 无效

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 – 如果 subscriberdomain 无效

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, domaincbid 无效。

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_ResourceContextDataSanitizer_ResourceStreamDataSanitizer_ResourceModuleDataSanitizer_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

一个回调订阅者。