我只有當我引用抑制文件中TSAN_OPTIONS
它的工作。至少對我而言,在編譯期間僅使用-fsanitize-blacklist
引用並不適用於環境變量。
不管怎麼說,這是一個可能的抑制文件
# sanitizer-thread-suppressions.txt
race:^tbb*
...這是你如何使用它:
TSAN_OPTIONS="suppressions=sanitizer-thread-suppressions.txt" ./my_binary
如果增加詳細程度,你應該看到像這樣的輸出:
TSAN_OPTIONS="verbosity=2 suppressions=sanitizer-thread-suppressions.txt" ./my_binary
...
ThreadSanitizer: matched suppression '^tbb*'
請注意,模式^tbb*
很簡單,但潛在的危險因爲它可能會在你自己的代碼中隱藏警告。更真實的會是這樣的:
race:^__interceptor_memset*
race:^tbb::interface9::internal::adaptive_mode*
race:^tbb::blocked_range*
race:^tbb::interface9::internal::start_for*
race:^tbb::internal::machine_load_store*
race:^tbb::strict_ppl::internal::micro_queue*
不要使用原子的任何形式,只要你這樣做,這些工具似乎沒有任何工作。 – goji
我剛剛發佈了另一個相關的問題(libstdC++原子而不是tbb),如果你感興趣:http://stackoverflow.com/questions/19128549/force-use-of-locks-inside-stdatomic-during-debugging-with -libstdc – goji