2013-10-02 23 views
3

有沒有人試過clang's ThreadSanitizerIntel Threading Building Blocks (TBB)用叮噹的ThreadSanitizer和TBB避免誤報

我目前的經驗是,即使是相對簡單的例子,您也會收到很多警告。不幸的是,其中許多似乎是誤報。

this answer到另一個ThreadSanitizer問題,推薦使用壓縮文件。可以幫助嗎?是否有TBB或任何其他技術的壓縮文件?

(附註:隨着Helgrind,它類似於許多誤報)

+0

不要使用原子的任何形式,只要你這樣做,這些工具似乎沒有任何工作。 – goji

+1

我剛剛發佈了另一個相關的問題(libstdC++原子而不是tbb),如果你感興趣:http://stackoverflow.com/questions/19128549/force-use-of-locks-inside-stdatomic-during-debugging-with -libstdc – goji

回答

0

我只有當我引用抑制文件中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*