AddressSanitizer 알려진 문제

참고 항목

향후 릴리스에서 보고 싶은 내용에 대한 피드백을 보내고 문제가 발생할 경우 버그를 보고합니다.

호환되지 않는 옵션 및 기능

이러한 옵션 및 기능은 호환되지 않으며 /fsanitize=address 사용하지 않도록 설정하거나 피해야 합니다.

  • /RTC 옵션은 AddressSanitizer와 호환되지 않으며 비활성화해야 합니다.
  • 증분 연결 은 지원되지 않으며 사용하지 않도록 설정해야 합니다.
  • 편집 및 계속하기는 지원되지 않으며 비활성화해야 합니다.
  • 코루틴은 AddressSanitizer와 호환되지 않으며 다시 시작 가능한 함수는 계측에서 제외됩니다.
  • OpenMP 는 지원되지 않으며 사용하지 않도록 설정해야 합니다.
  • 관리되는 C++ 는 지원되지 않으며 사용하지 않도록 설정해야 합니다.
  • C++ AMP는 지원되지 않으며 비활성화해야 합니다.
  • UWP(유니버설 Windows 플랫폼) 애플리케이션은 지원되지 않습니다.
  • 특수 사례 목록 파일은 지원되지 않습니다.
  • 선택적 alloc_dealloc_mismatch 런타임 옵션을 사용하는 MFC는 지원되지 않습니다.

표준 라이브러리 지원

MSVC 표준 라이브러리(STL)는 AddressSanitizer를 이해하고 다른 검사 제공하기 위해 부분적으로 인식됩니다. 자세한 내용은 컨테이너 오버플로 오류를 참조 하세요.

주석을 사용하지 않도록 설정하거나 지원되지 않는 버전에서 STL 코드에서 발생한 AddressSanitizer 예외는 여전히 실제 버그를 식별합니다. 그러나, 그들은 그들이 할 수 있는 만큼 정확 하지 않습니다.

이 예제에서는 전체 자릿수가 부족하고 주석을 사용할 수 있는 이점을 보여 줍니다.

// Compile with: cl /fsanitize=address /Zi
#include <vector>

int main() {   
    // Create a vector of size 10, but with a capacity of 20.    
    std::vector<int> v(10);
    v.reserve(20);

    // In versions prior to 17.2, MSVC ASan does NOT raise an exception here.
    // While this is an out-of-bounds write to 'v', MSVC ASan
    // ensures the write is within the heap allocation size (20).
    // With 17.2 and later, MSVC ASan will raise a 'container-overflow' exception:
    // ==18364==ERROR: AddressSanitizer: container-overflow on address 0x1263cb8a0048 at pc 0x7ff6466411ab bp 0x005cf81ef7b0 sp 0x005cf81ef7b8
    v[10] = 1;

    // Regardless of version, MSVC ASan DOES raise an exception here, as this write
    // is out of bounds from the heap allocation.
    v[20] = 1;
}

Windows 버전

특정 Windows 버전과 종속성이 있으므로 지원은 Windows 10에 중점을 줍니다. MSVC AddressSanitizer는 10.0.14393(RS1) 및 10.0.21323(시험판 참가자 빌드)에서 테스트되었습니다. 문제가 발생하면 버그 를 보고합니다.

메모리 사용량

AddressSanitizer 런타임은 실행 중에 메모리를 OS로 다시 해제하지 않습니다. OS의 관점에서 볼 때 메모리 누수처럼 보일 수 있습니다. 이 디자인 결정은 모든 필수 메모리를 미리 할당하지 않도록 의도적인 결정입니다.

AddressSanitizer 런타임 DLL 위치

런타임 파일은 clang_rt.asan*.dll .의 %VSINSTALLDIR%\VC\Tools\MSVC\<version>\bin\<host-arch>\<target-arch>\컴파일러 옆에 설치됩니다. 이러한 위치는 디버깅 세션의 경로와 Visual Studio 개발자 명령 프롬프트에 있습니다. 이러한 파일은 안 또는 C:\Windows\SysWOW64C:\Windows\System32 배치되지 않습니다.

사용자 지정 속성 시트 지원

Visual Studio IDE의 속성 관리자 창을 사용하면 프로젝트에 사용자 지정 .props 파일을 추가할 수 있습니다. Enable Address Sanitizer 속성(<EnableASAN>)이 표시되어 있더라도 빌드는 이를 인식하지 않습니다. 사용자 지정 .props 파일은 값을 사용하여 다른 속성을 설정하는 후 Microsoft.cpp.props포함되므로 이 속성이 <EnableASAN> 포함됩니다.

해결 방법으로 프로젝트의 루트에 파일을 만들어 Directory.Build.props 속성을 정의 <EnableASAN> 할 수 있습니다. 자세한 내용은 C++ 빌드 사용자 지정을 참조 하세요.

참고 항목

AddressSanitizer 개요
AddressSanitizer 빌드 및 언어 참조
AddressSanitizer 런타임 참조
AddressSanitizer 섀도 바이트
AddressSanitizer 클라우드 또는 분산 테스트
AddressSanitizer 디버거 통합
AddressSanitizer 오류 예제