Настройка проектов Linux для использования санитайзера адресов

В Visual Studio 2019 версии 16.1 поддержка AddressSanitizer (ASan) интегрирована в проектах Linux. Вы можете включить ASan для проектов Linux на основе MSBuild и проектов CMake. Это средство работает в удаленных системах Linux и подсистеме Windows для Linux (WSL).

Об ASan

ASan — это средство обнаружения ошибок использования памяти в среде выполнения для C/C++, которое перехватывает следующие ошибки:

  • Use after free (dangling pointer reference);
  • Heap buffer overflow;
  • Stack buffer overflow;
  • Use after return;
  • Use after scope;
  • Initialization order bugs.

Когда средство ASan обнаруживает ошибку, оно немедленно останавливает выполнение. При запуске приложения с поддержкой ASan в отладчике появляется сообщение с описанием типа ошибки, адресом памяти и расположением в исходном файле, где произошла ошибка:

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

Вы также можете просмотреть все выходные данные ASan (включая сведения о расположении выделенной или освобожденной поврежденной памяти) на панели отладки в окне вывода.

Включение ASan для проектов Linux на основе MSBuild

Примечание.

Начиная с версии Visual Studio 2019 16.4 AddressSanitizer для проектов Linux включается в разделе Свойства проекта>Свойства конфигурации>C/C++>Enable Address Sanitizer (Включить AddressSanitizer).

Чтобы включить ASan для проектов Linux на основе MSBuild, щелкните правой кнопкой мыши проект в обозревателе решений и выберите Свойства. Затем перейдите в меню Свойства конфигурации>C/C++>Санитайзеры. ASan включается с помощью флагов компоновщика и компилятора. При этом проект должен быть перекомпилирован.

Снимок экрана: страница свойств проекта с выбранными свойствами > конфигурации C/C плюс > Sanitizers. Параметр Enable Address Sanitizer имеет значение

Вы можете передать необязательные флаги среды выполнения ASan, выбрав Свойства конфигурации>Отладка>Флаги среды выполнения AddressSanitizer. Щелкните стрелку вниз, чтобы добавить или удалить флаги.

Снимок экрана: страница свойств проекта с выбранным параметром

Включение ASan для проектов Visual Studio CMake

Примечание.

Для сборки с использованием предустановок CMake, сначала включите ASan в файле CMakeLists.txt. Дополнительные сведения: Включение AddressSanitizer для Windows и Linux.

Чтобы включить ASan для CMake, щелкните правой кнопкой мыши файл CMakeLists.txt в обозревателе решений и выберите Параметры CMake для проекта.

При этом следует выбрать конфигурацию Linux (например, Linux-Debug) в левой части диалогового окна:

Снимок экрана: панель конфигураций с параметрами x64-Debug и Linux Debug.

Параметры ASan доступны в разделе Общие. Введите флаги ASan среды выполнения в формате "флаг=значение", разделенные пробелами. Интерфейс пользователя ошибочно предлагает использовать точку с запятой. Используйте пробелы или двоеточия для разделения флагов.

Снимок экрана: параметр

Установка отладочных символов ASan

Чтобы включить диагностику ASan, необходимо установить соответствующие отладочные символы (libasan-dbg) на удаленном компьютере Linux или в установке WSL. Версия libasan-dbg, которую можно загрузить, зависит от версии GCC, установленной на компьютере Linux:

Версия ASan Версия GCC
libasan0 gcc-4.8
libasan2 gcc-5
libasan3 gcc-6
libasan4 gcc-7
libasan5 gcc-8

Чтобы узнать существующую версию GCC, выполните следующую команду:

gcc --version

Чтобы узнать требуемую версию libasan-dbg, запустите программу и просмотрите сведения на панели Отладка в окне Вывод. Загруженная версия libasan-dbg которую можно загрузить, соответствует требуемой версии libasan-dbg, установленной на компьютере Linux. Вы можете нажать клавиши CTRL+F, чтобы ввести libasan в окне. Например, если у вас есть libasan4, вы увидите примерно такую строку:

Loaded '/usr/lib/x86_64-linux-gnu/libasan.so.4'. Symbols loaded.

Биты отладки ASan можно установить в дистрибутивах Linux с поддержкой apt, выполнив следующую команду, которая устанавливает версию 4:

sudo apt-get install libasan4-dbg

Полные инструкции по установке пакетов отладочных символов в Ubuntu можно найти в статье Пакеты отладочных символов.

Если средство ASan включено, в Visual Studio в верхней части панели Отладка в окне Вывод отобразится запрос на установку отладочных символов ASan.