2013-04-21 6 views
27

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

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

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

ответ

11

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

Используйте флаг Runtime Sanitization>Enable Address Sanitizer в вашей схеме, чтобы дать возможность

6

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

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

+4

я получил ошибку слишком: 'лязг: error: неподдерживаемая опция '-faddress-sanitizer''. Тем не менее, в 'clang -help' я вижу эту опцию – Guillaume

+0

@gaige: проблема в том, что Apple развертывает ** более старую ** версию Clang, которая использовала старый анти-дезинфицирующее средство' -faddress'. Более новый '-fsanitize = address' соединяется позже, когда добавляются другие дезинфицирующие средства. – 0xC0000022L

+0

@ 0xC0000022L Извините, мне показалось, что я делал этот пункт выше, когда говорил: «Вам нужно будет построить себя из более недавнего источника». Разумеется, в нем явно не говорится, что версия Apple старше, но она предполагает создание новой версии. Я обновлю язык, чтобы сделать его более понятным. – gaige

12

Адрес.

мерзавец будет показано это изменение вашего .xcscheme файла:

enableAddressSanitizer = "YES" 

Из New Features in Xcode 7 документа:

Address Sanitizer. Xcode 7 can build your app with instrumentation designed to catch and debug memory corruption using the address sanitizer.

Objective-C and C code is susceptible to memory corruption issues such as stack and heap buffer overruns and use-after-free issues. When these memory violations occur, your app can crash unpredictably or display odd behavior. Memory corruption issues are difficult to track down because the crashes and odd behavior are often hard to reproduce and the cause can be far from the origin of the problem.

Enable Address Sanitizer

You enable the address sanitizer in the build scheme. Once enabled, added instrumentation is built into the app to catch memory violations immediately, enabling you to inspect the problem right at the place where it occurs. Other diagnostic information is provided as well, such as the relationship between the faulty address and a valid object on the heap and allocation/deallocation information, which helps you pinpoint and fix the problem quickly.

Address sanitizer is efficient—fast enough to be used regularly, as well as with interactive applications. It is supported on OS X, in the Simulator, and on iOS devices.

 Смежные вопросы

  • Нет связанных вопросов^_^