AddressSanitizer или как сделать программы на C/С++ надежнее и безопаснее (Тестирование C/C++ программ)

Доклад принят в Программу конференции
Павел Архипов (Сбер — это современный стек технологий, драйвовые проекты и команда единомышленников. У нас около 3 000 продуктовых команд и огромное профессиональное IT-сообщество. Мы работаем над созданием удобных онлайн-сервисов в самых разных сферах.)Павел Архипов

Современные высоконагруженные системы невозможны без программирования на С/C++.

Даже если Ваши программисты не используют эти языки непосредственно, программы на С/C++ найдутся у Вас на нижних уровнях системы — MySQL, Apache, Perl, Python, Memcached и др.

С/C++ позволяют наиболее эффективно использовать CPU и оперативную память, но плата за гибкость высока.

Возможные ошибки использования памяти, такие как переполнение буфера (buffer overflow) и использование освобожденной памяти (use-after-free), отпугивают многих программистов.

До недавних пор единственным способом борьбы с такими ошибками были инструменты типа Valgrind (valgrind.org) — полезные, но очень медленные. Теперь же создавать безопасные, надежные и быстрые программы на C/C++ стало проще.

В докладе пойдет речь о новом инструменте для обнаружения ошибок использования памяти: AddressSanitizer.

Этот инструмент находит различные ошибки с минимальным замедлением, что позволяет использовать его не только при тестировании, но и в реальной боевой системе. Кроме устройства самого инструмента, вы узнаете, как он используется в компании Google для тестирования серверных и клиентских программ, а также рядом opensource разработчиков.