다음을 통해 공유


Visual Studio AddressSanitizer 확장 기능 라이브러리(VCAsan)

라이브러리는 VCAsan*.lib Visual Studio에서 확장된 디버거 IDE 기능을 구현합니다. 이러한 기능을 통해 IDE는 라이브 디버그 세션에서 AddressSanitizer 오류를 표시하거나 메타데이터와 함께 크래시 덤프 파일을 저장하여 오프라인으로 표시할 수 있습니다. 라이브러리는 MSVC 컴파일러에서 AddressSanitizer를 사용하도록 설정할 때마다 연결됩니다.

VCAsan 라이브러리 인벤토리

런타임 옵션 VCAsan 링크 라이브러리
/MT libvcasan.lib
/MD vcasan.lib
/MTd libvcasand.lib
/MDd vcasand.lib

VCAsan 라이브러리 기능

Visual Studio IDE의 Rich AddressSanitizer 오류 보고서 창

VCAsan 라이브러리는 인터페이스 함수 __asan_set_error_report_callback를 사용하여 AddressSanitizer 런타임 내에 콜백을 등록합니다. AddressSanitizer 보고서가 생성되면 이 콜백을 사용하여 Visual Studio에서 catch된 예외를 throw합니다. Visual Studio는 예외 데이터를 사용하여 IDE에서 사용자에게 표시되는 메시지를 생성합니다.

참고 항목

VCAsan 라이브러리는 AddressSanitizer 런타임에 콜백 함수를 등록합니다. 코드에서 이 등록 함수를 두 번째로 호출하는 경우 VCAsan 라이브러리 콜백 등록을 덮어씁니다. 이로 인해 모든 Visual Studio IDE 통합이 손실됩니다. 기본 IDE 사용자 환경으로 되돌리기. 콜백을 등록하는 사용자의 호출이 손실될 수도 있습니다. 두 문제 중 하나가 발생하면 버그를 제출합니다.

새 유형의 크래시 덤프 파일에 AddressSanitizer 오류 저장

VCAsan 라이브러리를 실행 파일에 연결하면 사용자는 런타임에 크래시 덤프를 생성하도록 설정할 수 있습니다. 그런 다음, 진단된 오류가 발생할 때 AddressSanitizer 런타임이 덤프 파일을 생성합니다. 이 기능을 사용하도록 설정하려면 다음과 같은 명령을 사용하여 환경 변수를 설정합니다 ASAN_SAVE_DUMPS .

set ASAN_SAVE_DUMPS=MyFileName.dmp

Visual Studio IDE 규칙을 따르려면 파일에 확장명이 있어야 합니다 .dmp . (17.7 이전)

덤프 파일을 지정 ASAN_SAVE_DUMPS하면 다음과 같습니다. AddressSanitizer 런타임에서 오류가 발생하면 오류와 연결된 메타데이터가 있는 크래시 덤프 파일을 저장합니다. Visual Studio 버전 16.9 이상의 디버거는 덤프 파일에 저장된 메타데이터를 구문 분석할 수 있습니다. 테스트별로 설정하고 ASAN_SAVE_DUMPS , 이러한 이진 아티팩트를 저장한 다음, 적절한 소스 인덱싱을 사용하여 IDE에서 볼 수 있습니다.

Visual Studio 버전 17.7 이상에서는 다음을 지원합니다.

  • 이제 따옴표 붙은 문자열이 올바르게 처리됩니다. 이전 버전에서는 Visual Studio 내부 환경 또는 PowerShell을 사용하는 경우 환경 변수를 따옴표나 공백을 포함하도록 설정하면 예상 덤프 파일을 만들지 못했습니다.

  • 확장이 .dmp 명시적으로 지정된 경우(예: set ASAN_SAVE_DUMPS=MyDmp.dmp) VCAsan은 명시적으로 사용하며 연결된 프로세스 ID를 덤프 파일 이름에 추가하지 않습니다.

  • .dmp 환경 변수에서 지정된 동일한 이름을 가진 파일이 이미 있는 경우 VCAsan은 다음과 같이 파일 이름을 수정합니다.

    • 파일 이름에 숫자를 괄호로 추가합니다. 예: Myfile (1).dmp.
    • 괄호 안에 숫자를 여러 번 추가한 후 고유한 이름을 생성하지 못하면 파일이 VCAsan이 인쇄할 %APPLOCAL% 임시 경로에 저장됩니다. 예: C:\Users\~\AppData\Local\Temp\Dump.dmp.
    • 임시 경로에 저장하지 못하면 진단 오류가 표시됩니다.

참고 항목

AddressSanitizer 개요
AddressSanitizer 알려진 문제
AddressSanitizer 빌드 및 언어 참조
AddressSanitizer 런타임 참조
AddressSanitizer 섀도 바이트
AddressSanitizer 클라우드 또는 분산 테스트
AddressSanitizer 오류 예제