Дезинфицирующее средство Clang Address на OS X

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

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

у меня есть загрузка clang с Xcode и это до-до-даты. (возможно, эта версия не имеет адреса sanitizer build с ним)

3 ответов


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


дезинфицирующее средство адреса было добавлено как новая функция в Xcode 7.

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

git затем покажет это изменение вашему :

enableAddressSanitizer = "YES"

С новые функции в Xcode 7 документ:

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

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

Enable Address Sanitizer

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

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


согласно источнику (в частности, если вы захватите лязг-425.0.24 пакета из Apple по исходному сайту, тестовый файл 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, дезинфицирующие средства все этой формы в этой версии.