Ответ 1
Thread Sanitizer может использовать файлы подавления, чтобы выборочно отключать отчеты о проблемах, которые он обнаруживает в библиотеках за пределами вашего кода. Чтобы использовать их с Xcode, сначала создайте файл с именем TSan.supp
(или что-то подобное) и поместите в него строки, как показано ниже:
mutex:Purge
mutex:ProcessBulkInData
mutex:EventDestroy
Я столкнулся с проблемами с плохими мьютексами в нескольких внутренних функциях в определенной библиотеке, поэтому я подавил предупреждения mutex (часть mutex:
выше), предоставив подстроку из имен функций, которые появились в стеке Sanitizer Thread след.
После того как у вас есть файл подавления, отредактируйте свою схему запуска в Xcode и перейдите на вкладку "Аргументы". В разделе "Переменные среды" добавьте имя TSAN_OPTIONS
и присвойте ему значение suppressions=[path_to_TSan.supp]
. Путь должен быть относительно вашего двоичного файла приложения в вашем производном местоположении данных.
Вам может потребоваться несколько раз запустить Thread Sanitizer и отредактировать файл подавления, чтобы добавить каждый из элементов из библиотеки, которую вы хотите подавить.
Формат файла и другие параметры этого файла подавления можно найти на этой странице вики. Для потомков это
поток: подавляет отчеты, связанные с потоками (утечками)
mutex: подавляет сообщения, связанные с мьютексами (уничтожение заблокированного мьютекса)
сигнал: подавляет отчеты, относящиеся к обработчикам сигналов (вызовы обработчика malloc())
тупик: подавляет отчеты об отключении блокировки
called_from_lib: подавляет все перехватчики в определенной библиотеке
Спасибо за анонимного инженера Apple, который объяснил этот процесс в ответ на недавний отчет об ошибке.