Поделиться через


Библиотека расширенных функциональных возможностей Visual Studio AddressSanitizer (VCAsan)

Библиотеки реализуют расширенные VCAsan*.lib возможности интегрированной среды разработки отладчика в Visual Studio. Эти функции позволяют интегрированной среде разработки отображать ошибки AddressSanitizer в динамических сеансах отладки или в автономном режиме, сохраняя файл аварийного дампа с метаданными. Библиотека связана в любой момент, когда Параметр AddressSanitizer включен компилятором MSVC.

Инвентаризация библиотеки VCAsan

Параметр среды выполнения Библиотека ссылок VCAsan
/MT libvcasan.lib
/MD vcasan.lib
/MTd libvcasand.lib
/MDd vcasand.lib

Функции библиотеки VCAsan

Окно отчета об ошибке Rich AddressSanitizer в интегрированной среде разработки Visual Studio

Библиотека VCAsan регистрирует обратный вызов в среде выполнения AddressSanitizer с помощью функции __asan_set_error_report_callbackинтерфейса. Если создается отчет AddressSanitizer, этот обратный вызов используется для создания исключения, поймаемого Visual Studio. Visual Studio использует данные исключения для создания сообщения, отображаемого пользователю в интегрированной среде разработки.

Примечание.

Библиотека VCAsan регистрирует функцию обратного вызова в среде выполнения AddressSanitizer. Если код вызывает эту функцию регистрации во второй раз, она перезаписывает регистрацию обратного вызова библиотеки VCAsan. Это приводит к потере всех интеграции интегрированной среды разработки Visual Studio. Вы вернетесь к пользовательскому интерфейсу интегрированной среды разработки по умолчанию. Кроме того, можно зарегистрировать обратный вызов пользователя. При возникновении любой проблемы отправьте ошибку.

Сохранение ошибок AddressSanitizer в новом типе файла аварийного дампа

При связывании библиотеки VCAsan с исполняемым файлом пользователи могут включить его для создания аварийного дампа во время выполнения. Затем среда выполнения AddressSanitizer создает файл дампа при возникновении диагностики ошибки. Чтобы включить эту функцию, пользователь задает ASAN_SAVE_DUMPS переменную среды с помощью такой команды:

set ASAN_SAVE_DUMPS=MyFileName.dmp

Файл должен иметь .dmp расширение для выполнения соглашений интегрированной среды разработки Visual Studio. (До 17.7)

Вот что происходит при указании ASAN_SAVE_DUMPSфайла дампа для: если ошибка перехватывается средой выполнения AddressSanitizer, он сохраняет файл аварийного дампа, имеющий метаданные, связанные с ошибкой. Отладчик в Visual Studio версии 16.9 и более поздних версий может анализировать метаданные, сохраненные в файле дампа. Эти двоичные артефакты можно задать ASAN_SAVE_DUMPS на основе каждого теста, а затем просмотреть их в интегрированной среде разработки с соответствующим исходным индексированием.

Visual Studio версии 17.7 и более поздних версий поддерживает следующее:

  • Строки с кавычками теперь обрабатываются правильно. В предыдущих версиях для сред в Visual Studio или при использовании PowerShell переменная среды, содержащая кавычки или пробелы, не сможет создать ожидаемый файл дампа.

  • .dmp Если расширение явно указано (например, set ASAN_SAVE_DUMPS=MyDmp.dmp), VCAsan использует его явным образом и не добавит связанный идентификатор процесса в имя файла дампа.

  • .dmp Если файл уже существует с тем же именем, указанным из переменной среды, VCAsan изменяет имя файла следующим образом:

    • Добавляет число к имени файла в скобках. Например, Myfile (1).dmp.
    • Если после нескольких попыток добавления числа в скобках не удается создать уникальное имя, файл сохраняется во временный %APPLOCAL% путь, который VCAsan будет напечатан. Например, C:\Users\~\AppData\Local\Temp\Dump.dmp.
    • Если сохранение на временный путь завершается ошибкой, отображается диагностическая ошибка.

См. также

Обзор AddressSanitizer
Известные проблемы AddressSanitizer
Справочник по сборке и языку AddressSanitizer
Справочник по среде выполнения AddressSanitizer
Теневой байт AddressSanitizer
Облачное или распределенное тестирование AddressSanitizer
Примеры ошибок AddressSanitizer