Версия компилятора Clang с поддержкой SAFECode для выявления ошибок при работе с памятью
В отличие от инструментов подобных Valgrind, Clang с поддержкой SAFECode обладает следующими преимуществами:
- Он быстрее, так как не использует динамической трансляции исполняемого файла и может оптимизировать некоторые runtime-проверки;
- Он более точен, так как знает расположение границ отдельного стека и глобальных объектов (для поиска данных границ Valgrind использует эвристические методы);
- Он обеспечивает более полную диагностику ошибок, выдавая больше полезной информации о каждой выявленной проблеме.
Текущий выпуск ориентирован в первую очередь на определение фактов разыменования указателей, которые могут привести к переполнению буфера. В будущем из основного экспериментального проекта SAFECode, поддерживаемого сообществом разработчиков LLVM, в Clang будут перенесены некоторые дополнительные функции. Из ожидаемых в будущем улучшений можно отметить:
- Выявление некорректного доступа к памяти (указатели, указывающие на несуществующий или удаленный объект);
- Определение неправильных вызовов функции free(), например, двойное освобождение выделенной памяти;
- Определение использования неинициализированных указателей;
- Выявление ошибок при работе с памятью, вызванных неправильным использованием функций стандартной библиотеки;
- Дополнительные оптимизации, включая удаление проверок корректности типов на этапе загрузки/сохранения и вынос за пределы циклов.
Clang представляет собой LLVM фронтенд для языков C, С++ и Objective-C, который можно использовать вместо GCC. Исходные тексты Clang распространяются в рамках лицензии BSD, что делает этот компилятор интересным решением для замены GCC в BSD-подобных ОС. В настоящее время активно развивается проект адаптации данного компилятора для сборки базовой системы и портов FreeBSD. Начиная с FreeBSD 9 код Clang будет включен в состав базовой системы и может быть использован вместо GCC в качестве системного компилятора FreeBSD. Используя Clang уже удалось обеспечить сборку таких значительных проектов, как ядро Linux и фреймворк Qt.
Источник: http://www.opennet.ru/opennews/art.shtml?num=31533
|
0 | Tweet | Нравится |
|