2013-10-02 1 views
3

Est-ce que quelqu'un a essayé clang's ThreadSanitizer avec Intel Threading Building Blocks (TBB)? Mon expérience jusqu'ici était que vous obtiendrez beaucoup d'avertissements, même pour des exemples relativement simples. Malheureusement, beaucoup d'entre eux semblent être de faux positifs.Éviter les faux positifs avec ThreadSanitizer et TBB de clang

En this answer à une autre question ThreadSanitizer, les fichiers de suppression sont recommandés. Cela pourrait-il aider? Existe-t-il un fichier de suppression pour TBB ou toute autre technique?

(Note:.. Avec Helgrind, il ressemble beaucoup de faux positifs)

+0

N'utilisez pas d'atomique d'aucune sorte, dès que vous le faites, aucun de ces outils ne semble bien fonctionner. – goji

+1

Je viens de poster une autre question connexe (libstdC++ atomics au lieu de tbb), si vous êtes intéressé: http://stackoverflow.com/questions/19128549/force-use-of-locks-inside-stdatomic-during-debugging-with -libstdc – goji

Répondre

0

Je n'obtenu ce travail quand je référence le fichier de suppression dans TSAN_OPTIONS. Au moins pour moi, seul le référencement lors de la compilation avec -fsanitize-blacklist ne fonctionnait pas avec la variable d'environnement.

Quoi qu'il en soit, voici un fichier de suppression possible

# sanitizer-thread-suppressions.txt 
race:^tbb* 

... et comment vous pouvez l'utiliser:

TSAN_OPTIONS="suppressions=sanitizer-thread-suppressions.txt" ./my_binary 

Si vous augmentez verbosité, vous devriez voir les résultats comme ceux-ci:

TSAN_OPTIONS="verbosity=2 suppressions=sanitizer-thread-suppressions.txt" ./my_binary 
... 
ThreadSanitizer: matched suppression '^tbb*' 

S'il vous plaît noter que le modèle ^tbb* est simple mais potentiellement danger Cela pourrait cacher des avertissements dans votre propre code. Plus réaliste serait quelque chose comme ceci:

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* 
Questions connexes