我试图运行这个与我的一个项目,并检测到许多问题与第三方二进制库.这些问题在我自己的代码中是压倒性的,我不能替换二进制库直到厂商修复它.
如何在Xcode中针对第三方库抑制这些Thread Sanitizer警告?
解决方法
mutex:Purge mutex:ProcessBulkInData mutex:EventDestroy
我在特定库中的几个内部函数中遇到了不良互斥体的问题,所以我通过提供从线程清理程序堆栈跟踪中出现的函数名称的子字符串来抑制互斥体警告(上面的互斥体).
完成压制文件后,在Xcode中编辑运行方案,然后转到“参数”选项卡.在环境变量下,添加名称TSAN_OPTIONS并给它一个值为suppressions = [path_to_TSan.supp].该路径将需要相对于您的派生数据位置中的应用程序的二进制文件.
您可能需要运行Thread Sanitizer几次,并编辑您的抑制文件以添加要压缩的库中的每个项目.
这个压缩文件的文件格式和其他选项可以在this wiki page找到.对于后代,这些是
thread: suppresses reports related to threads (leaks)
mutex: suppresses reports related to mutexes (destruction of a locked mutex)
signal: suppresses reports related to signal handlers (handler calls malloc())
deadlock: suppresses lock inversion reports
called_from_lib: suppresses all interceptors in a particular library
感谢匿名的苹果工程师,他解释了这个过程,以回应最近的错误报告.