Почему нельзя включить все дезинфицирующие средства?

лязг имеет различные дезинфицирующие средства, которые могут быть включены для выявления проблем во время выполнения.
Однако есть некоторые дезинфицирующие средства, которые я не могу использовать вместе. Это почему?

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

16

Решение

Я думаю, что проблема в том, что Asan и Msan оба хотят контролировать кучу, и оба хотят зарезервировать большой объем памяти для использования в качестве «теневой памяти», которая отслеживает распределение и использование памяти, используемой вашей программой.

Оба они не могут быть активными, потому что они будут пытаться отследить память, используемую другим дезинфицирующим средством (которое может показаться «безопасным» в соответствии с правилами, которые проверяет дезинфицирующее средство).

Это также приведет к сумасшедшему использованию памяти, поскольку оба дезинфицирующих средства будут выделять дополнительную память для отслеживания каждого байта, используемого вашей программой.

Возможно, теоретически их можно было бы реорганизовать, чтобы они имели общую основу, чтобы они могли сотрудничать, а не конфликтовать, но, вероятно, есть очень веские практические причины, по которым это может быть затруднительно или ухудшать производительность.

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]