Дезинфицирующее средство 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-код подвержен проблемам повреждения памяти, таким как переполнение буфера стека и кучи и проблемы использования после освобождения. Когда эти нарушения памяти происходят, приложение может аварийно завершить работу непредсказуемо или отображать странное поведение. Проблемы с повреждением памяти трудно отслеживать, потому что сбои и странное поведение часто трудно воспроизвести, и причина может быть далека от источника проблемы.
включить адрес дезинфицирующее средство в схеме сборки. После включения добавлена инструментирование встроен в приложение, чтобы поймать нарушения памяти сразу, что позволяет проверить проблему прямо в том месте, где это происходит. Также предоставляется другая диагностическая информация, такая как связь между ошибочным адресом и допустимым объектом в куче и информация о распределении/освобождении, которая помогает быстро определить и устранить проблему.
дезинфицирующее средство адреса эффективно-быстро достаточно регулярно использоваться, а также с интерактивными приложениями. Он поддерживается на 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
, дезинфицирующие средства все этой формы в этой версии.