Ответ 1
Поддержка AddressSanitizer в Xcode еще не полностью реализована. Пожалуйста, рассмотрите возможность использования соединительной линии Clang (см. http://code.google.com/p/address-sanitizer/wiki/HowToBuild для инструкций по сборке)
Я хотел бы использовать 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 и он обновлен. (возможно, у этой версии не было проблемы с дезинфицирующим устройством)
Поддержка AddressSanitizer в Xcode еще не полностью реализована. Пожалуйста, рассмотрите возможность использования соединительной линии Clang (см. http://code.google.com/p/address-sanitizer/wiki/HowToBuild для инструкций по сборке)
Адрес Sanitizer был добавлен как новая функция в Xcode 7.
Используйте флаг Runtime Sanitization
> Enable Address Sanitizer
в вашей схеме, чтобы включить эту опцию.
git затем отобразит это изменение в вашем файле .xcscheme
:
enableAddressSanitizer = "YES"
Из Новые функции в Xcode 7 document:
Адрес дезинфицирующего средства. Xcode 7 может создать ваше приложение с помощью инструментария, предназначенного для улавливания и отладки памяти с использованием дезинфицирующего устройства.
Objective-C, а код C восприимчив к ошибкам памяти, таким как переполнение стека и кучи, а также проблемы послепродажного обслуживания. Когда эти нарушения памяти происходят, ваше приложение может непредсказуемо разбиться или отобразить нечетное поведение. Проблемы с повреждением памяти трудно отследить, потому что сбои и нечетное поведение часто трудно воспроизвести, и причина может быть далека от причины проблемы.
Вы активируете дезинфицирующее средство адреса в схеме сборки. После включения в приложение добавлено инструментальное средство, позволяющее сразу выявлять нарушения памяти, позволяя вам проверить проблему прямо там, где она происходит. Также предоставляется другая диагностическая информация, такая как взаимосвязь между ошибочным адресом и действительным объектом в информации о куче и распределении/освобождении, которая помогает вам быстро определить и устранить проблему.
Дезинфицирующее средство для адресов эффективно, достаточно быстро, чтобы регулярно использоваться, а также с интерактивными приложениями. Он поддерживается в OS X, в симуляторе и на устройствах iOS.
Согласно источнику (в частности, если вы захватите 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
, дезинфицирующие средства все это будут в этой версии.