AddressSanitizer 클라우드 또는 분산 테스트
AddressSanitizer 오류가 발생하는 시기와 위치를 디버그할 필요가 없습니다. 오류가 발생할 때 모든 AddressSanitizer 관련 컨텍스트를 저장하는 크래시 덤프를 만들도록 런타임을 구성합니다. 그런 다음 디버깅을 위해 해당 크래시 덤프를 다른 PC로 보냅니다. 클라우드 또는 분산 테스트에서 AddressSanitizer를 실행할 때 오프라인 디버깅은 중요한 시간 보호기가 될 수 있습니다. 오류가 발생하는 테스트 또는 프로덕션 인프라에서 덤프를 만들고 나중에 개발자 PC에서 디버그할 수 있습니다.
Visual Studio 디버거는 정확하게 진단된 AddressSanitizer 오류를 제공합니다. 테스트를 다시 실행하거나, 거대한 데이터 세트를 복사하거나, 손실된 데이터를 검색하거나, 오프라인으로 전환된 테스트 머신을 찾을 필요 없이 이러한 버그를 볼 수 있습니다. 크래시 덤프만 로드하면 됩니다.
다음 환경 변수를 설정하여 AddressSanitizer 실패 시 크래시 덤프가 생성됩니다.
set ASAN_SAVE_DUMPS=MyFileName.dmp
참고 항목
Visual Studio 명명 규칙을 따르려면 파일 이름에 접미사가 .dmp
있어야 합니다.
이 덤프 파일 은 나중에 다른 컴퓨터에서 Visual Studio를 사용하여 표시할 수 있습니다.
Visual Studio는 원래 소스 코드의 컨텍스트에서 오류 정보를 표시할 수 있습니다. 이렇게 하려면 Visual Studio에서 기호 및 인덱싱된 소스 코드를 디버깅해야 합니다. 최상의 디버깅 환경을 위해 이러한 이진 파일을 생성하는 데 사용되는 EXE, PDB 및 소스 코드가 일치해야 합니다.
원본 및 기호 저장에 대한 자세한 내용은 원본 및 기호 섹션을 참조하세요 . 구현 세부 정보 및 세분화된 제어에 대한 자세한 내용은 디버거 통합을 참조 하세요.
예제 - 빌드, 테스트 및 분석
A, B 및 C의 세 가지 컴퓨터를 고려합니다. 빌드는 컴퓨터 B에서 수행되고, 테스트는 컴퓨터 C에서 실행되며, 컴퓨터 A에서 오류를 분석합니다. 소스 코드의 소스 줄 및 열 번호에 대해 오류가 보고됩니다. 정확한 버전의 소스 코드를 사용하여 생성된 PDB 파일의 기호 집합과 함께 호출 스택을 볼 수 있습니다.
다음 단계는 .dmp 파일을 만들고 AddressSanitizer 덤프 파일을 오프라인으로 보는 로컬 또는 분산 시나리오에 대한 것입니다.
로컬로 .dmp 생성
- 빌드
- 실행 파일 테스트
- 생성된 .dmp 파일을 빌드 디렉터리에 복사
- 동일한 디렉터리에서 쌍을 이루는 .pdb를 사용하여 .dmp 파일을 엽니다.
분산 시스템에서 .dmp 생성
- 원본 인덱싱 데이터 블록에 대한 PDB 빌드 및 후처리
- (.exe, .pdb)의 원자성 쌍을 테스트 머신에 복사하고 테스트를 실행합니다.
- 버그 보고 데이터베이스에 원자성 쌍(.pdb, .dmp)을 씁니다.
- Visual Studio는 동일한 디렉터리에서 쌍을 이루는 .pdb를 사용하여 .dmp 파일을 엽니다.
참고 항목
분석에 사용하는 Visual Studio 2019 컴퓨터는 GitHub 또는 인덱싱된 원본이 저장된 내부 \\Machine\share
컴퓨터에 액세스할 수 있어야 합니다.
AddressSanitizer .dmp 파일 보기
디버거 IDE가 PDB 및 원본 파일을 찾을 수 있는지 확인합니다.
Visual Studio를 열고 코드 없이 계속을 선택합니다. 그런 다음 파일>열기>파일을 선택하여 파일 열기 대화 상자를 엽니다. 파일 이름 접미사가 .dmp.
여기에 표시된 화면에는 기호 및 원본에 대한 IDE 액세스를 사용하도록 설정하는 한 단계가 더 필요합니다.
기호 경로를 설정한 다음 네이티브 전용으로 디버그를 선택합니다.
이 스크린샷은 원본 및 AddressSanitizer 메타데이터가 로드된 최종 로드된 덤프 파일을 보여줍니다.
원본 및 기호
원본 서버를 사용하면 클라이언트가 애플리케이션을 빌드하는 데 사용되는 원본 파일의 정확한 버전을 검색할 수 있습니다. 실행 파일 또는 DLL의 소스 코드는 시간이 지남에 따라 버전 간에 변경 될 수 있습니다. 이를 사용하여 특정 버전의 애플리케이션을 빌드한 것과 동일한 소스 코드를 확인할 수 있습니다.
해당 PDB 파일로 EXE를 디버깅하는 동안 디버거는 포함된 원본 서버 데이터 블록을 사용하여 소스 제어에서 적절한 파일을 검색할 수 있습니다. 컴파일러 옵션에 의해 PDB에 자동으로 배치된 정규화된 이름에 /Zi
매핑되는 파일을 로드합니다.
원본 서버를 사용하려면 PDB 파일에 데이터 블록을 쓰는 srcsrv
데 사용하여 pdbstr.exe
애플리케이션을 "원본 인덱싱"해야 합니다. 자세한 내용은 원본 서버 및 원본 인덱싱의 데이터 블록 섹션을 참조하세요. 원본을 인덱싱하고 기호를 게시하는 단계와 디버거에 대한 기호 및 소스 코드를 지정하는 방법도 유용합니다.
외부 설명서는 다음을 참조하세요.
참고 항목
AddressSanitizer 개요
AddressSanitizer 알려진 문제
AddressSanitizer 빌드 및 언어 참조
AddressSanitizer 런타임 참조
AddressSanitizer 섀도 바이트
AddressSanitizer 디버거 통합
AddressSanitizer 오류 예제