如何从外部库抑制Xcode中的线程清理程序警告?

前端之家收集整理的这篇文章主要介绍了如何从外部库抑制Xcode中的线程清理程序警告?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Xcode 8集成了线程消毒器,一种用于检测种族条件和其他线程相关问题的工具.

我试图运行这个与我的一个项目,并检测到许多问题与第三方二进制库.这些问题在我自己的代码中是压倒性的,我不能替换二进制库直到厂商修复它.

如何在Xcode中针对第三方库抑制这些Thread Sanitizer警告?

解决方法

线程消毒器可以使用抑制文件来有选择地关闭代码之外的库中检测到的问题的报告.要使用这些与Xcode,首先创建一个名为TSan.supp(或类似的东西)的文件,并将其中的行如下:
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

感谢匿名的苹果工程师,他解释了这个过程,以回应最近的错误报告.

原文链接:https://www.f2er.com/iOS/328974.html

猜你在找的iOS相关文章