Версия компилятора Clang с поддержкой SAFECode для выявления ошибок при работе с памятью
18 августа 2011 года
Анонсирован (Архивная копия от 7 сентября 2012 на Wayback Machine) выпуск компилятора Clang, разрабатываемого в рамках проекта LLVM, отличающийся добавлением поддержки технологии SAFECode, позволяющей автоматизировать выявление ошибок, связанных с некорректной работой с памятью. Поддержка SAFECode включается через указание специальной опции и никак не влияет на поведение компилятора, когда данная опция не активна, т.е. представленный выпуск может быть использован в роли полной замены классической сборке clang/clang++. Для загрузки доступны как исходные тексты, так и готовые сборки для Linux и Mac OS X.
В отличие от инструментов подобных 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://lists.cs.uiuc.edu/piper...) (Архивная копия от 7 сентября 2012 на Wayback Machine)
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.