Clangには、実行時に問題を捕捉するためにオンにできるさまざまな消毒剤があります。
しかし、一緒に使うことができない消毒剤がいくつかあります。何故ですか?すべてのサニタイザを有効にすることができないのはなぜですか?
clang++-3.9 -std=c++1z -g -fsanitize=memory -fsanitize=address -o main main.cpp 1
clang: error: invalid argument '-fsanitize=address' not allowed with '-fsanitize=memory'
それは大したことではないのですが、私は私のユニットテストを実行したときに、私は同じテストのための複数のバイナリを作成し、それらを別々に実行してきたので、それは、もはやそれが必要よりも時間がかかります。
clang++-3.9 -std=c++1z -g -fsanitize=address -o test1 test.cpp
clang++-3.9 -std=c++1z -g -fsanitize=memory -fsanitize=undefined -o test2 test.cpp
私の推測では、計測器の一部は互換性がないと考えられます。 1つの消毒剤の計量は、他の1つに偽陽性または偽陰性をもたらす。しかし、私は技術的な詳細にも非常に興味があります。 – MikeMB
"ユニットテストを実行すると、" -O "を使用していないように見えます。 '-O1'はメモリサニタイザで安全に使うことができ、スタックトレースを壊さない(テールコールとは別に) – viraptor
@viraptorありがとう、それは良い点です。私は実際のコンパイル時間も指していました。複数のバイナリをビルドして、同じソフトウェアコンポーネントをテストします。 –