Clang hat verschiedene Sanitizer, die eingeschaltet werden können, um Probleme zur Laufzeit zu erfassen.
Allerdings gibt es einige Desinfektionsmittel, die ich nicht zusammen verwenden kann. Warum das?Warum können alle Sanitizer nicht durch Klon aktiviert werden?
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'
Es ist keine große Sache, aber wenn ich meine Unit-Tests laufen, dauert es länger, als es sollte, weil ich jeden von ihnen getrennt mehrere Binärdateien für den gleichen Tests erstellen müssen, und ausführen.
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
Meine Vermutung wäre, dass einige der Instrumente einfach nicht kompatibel sind - z. Die Instrumentierung eines Desinfektionsmittels würde im anderen zu falsch positiven oder falsch negativen Ergebnissen führen. Aber ich würde mich auch sehr für die technischen Details interessieren. – MikeMB
"Wenn ich meine Komponententests ausführen, dauert es länger als es sollte" -> es sieht so aus, als ob Sie nicht "-O" verwenden. '-O1' ist sicher zu verwenden mit Speicher Desinfektionsmittel und wird Stacktraces (abgesehen von Schwanz-Anrufe) nicht korrumpieren – viraptor
@viraptor Danke, das ist ein guter Punkt. Ich habe mich auch auf die eigentliche Kompilierungszeit bezogen. Erstellen mehrerer Binärdateien zum Testen derselben Softwarekomponenten –