Подтвердить что ты не робот

Clang Address Sanitizer на OS X

Я хотел бы использовать sanitizer для clang для OSX Mountain Lion, потому что Valgrind имеет проблемы с проверкой памяти на этой платформе. Но когда у меня был -fsanitize=address во время компиляции (как я вижу на этой странице: http://clang.llvm.org/docs/AddressSanitizer.html), я получил эту ошибку: clang: error: argument unused during compilation: '-fsanitize=address'

Итак, мой вопрос заключается в том, как использовать Clang Address Sanitizer для OS X? Если я не могу использовать его, какой инструмент я могу использовать?

У меня есть скачать clang с Xcode и он обновлен. (возможно, у этой версии не было проблемы с дезинфицирующим устройством)

4b9b3361

Ответ 1

Поддержка AddressSanitizer в Xcode еще не полностью реализована. Пожалуйста, рассмотрите возможность использования соединительной линии Clang (см. http://code.google.com/p/address-sanitizer/wiki/HowToBuild для инструкций по сборке)

Ответ 2

Адрес Sanitizer был добавлен как новая функция в Xcode 7.

Используйте флаг Runtime Sanitization > Enable Address Sanitizer в вашей схеме, чтобы включить эту опцию.

git затем отобразит это изменение в вашем файле .xcscheme:

enableAddressSanitizer = "YES"

Из Новые функции в Xcode 7 document:

Адрес дезинфицирующего средства. Xcode 7 может создать ваше приложение с помощью инструментария, предназначенного для улавливания и отладки памяти с использованием дезинфицирующего устройства.

Objective-C, а код C восприимчив к ошибкам памяти, таким как переполнение стека и кучи, а также проблемы послепродажного обслуживания. Когда эти нарушения памяти происходят, ваше приложение может непредсказуемо разбиться или отобразить нечетное поведение. Проблемы с повреждением памяти трудно отследить, потому что сбои и нечетное поведение часто трудно воспроизвести, и причина может быть далека от причины проблемы.

Enable Address Sanitizer

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

Дезинфицирующее средство для адресов эффективно, достаточно быстро, чтобы регулярно использоваться, а также с интерактивными приложениями. Он поддерживается в OS X, в симуляторе и на устройствах iOS.

Ответ 3

Согласно источнику (в частности, если вы захватите clang-425.0.24 пакет из Apple Open Source Site, тестовый файл src/tools/clang/test/Driver/darwin-asan-nofortify.c:

// rdar://11496765, rdar://12417750
// -faddress-sanitizer is not currently supported.
// XFAIL: *

И, конечно, есть ошибка с использованием -faddress-sanitizer, поэтому она выглядит как под OS X, вам нужно будет построить clang из более позднего источника, чтобы получить дезинфицирующее средство для адреса.

Вариант командной строки

Попробуйте использовать -faddress-sanitizer вместо -fsanitize=address. Версия Apple, по-видимому, основана на более старой версии CLANG, и если вы запустите clang --help, дезинфицирующие средства все это будут в этой версии.