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 오류 예제