언리얼 빌드 툴(UBT) 은 Linux 및 Android용 클랭 새니타이저(Clang Sanitizer) 를 지원합니다. 이 페이지에서는 어떤 새니타이저가 지원되는지, 새니타이저를 빌드에서 어떻게 사용하는지 알아봅니다.
개요
프로그래밍 오류에는 일반적으로 컴파일 시간에 잡히지 않는 다양한 타입의 오류가 있으며, 이는 컴파일러가 유효한 C++ 구문 활용이라고 인식하기 때문입니다. 구문이 맞다고 해도 로직의 구멍은 다음과 같이 원치 않는 행동으로 이어질 수 있습니다.
- 메모리 누수
- 경쟁 조건
- 초기화되지 않은 메모리
- 배열 내 아웃 오브 바운드 액세스
- 정수 오버플로
보통 이런 문제는 런타임에서 시행착오(trial-and-error) 디버깅을 통해서만 진단할 수 있습니다. 클랭 새니타이저를 활성화하고 애플리케이션을 빌드하면 이러한 오류를 직접 보고하는 로그 출력을 통해 보다 빠르게 오류를 찾아낼 수 있습니다.
클랭 새니타이저에 대한 정보와 그 이점에 관한 자세한 내용은 클랭 문서에서 볼 수 있습니다.
새니타이저를 사용하여 빌드 툴 실행하기
빌드에서 새니타이저를 사용하려면 원하는 새니타이저의 UBT 실행인자와 함께 언리얼 빌드 툴을 실행합니다. 그러면 새니타이저가 최종 실행파일에 연결됩니다. 예를 들어 다음 명령줄은 빌드에 어드레스 새니타이저(Address Sanitizer, ASan) 를 링크하여 프로젝트를 빌드합니다.
Build\BatchFiles\Build.bat MyGame Linux Development -WaitMutex -FromMsBuild -EnableASan
애플리케이션을 실행할 때 새니타이저의 오류 탐지 출력을 로그에서 볼 수 있습니다. 이 빌드를 명령줄을 통해 바로 실행하거나 Visual Studio에서 프로젝트의 프로퍼티(Properties) 를 열고 새니타이저의 명령을 NMake > 명령줄 빌드(Build Command Line) 에 추가할 수 있습니다.
보통 클랭 새니타이저는 메모리를 추가로 소비하며 새니타이저에 따라 링크된 프로그램을 최소 2배, 때로는 최대 15배까지 느리게 합니다. 상세한 정보는 각 새니타이저에 대한 클랭의 사양을 참조하세요.
지원하는 새니타이저
UBT에서 지원하는 새니타이저는 다음과 같습니다.
새니타이저 | UBT 명령 | 설명 |
---|---|---|
어드레스 새니타이저(ASan) | -EnableASan | 아웃 오브 바운드 액세스 오류, 메모리 누수 등 다양한 메모리 액세스 관련 문제를 탐지합니다. |
HWASan(Android 전용) | -EnableHWASan | ASan의 하드웨어 가속 버전으로 Android에 사용합니다. 메모리 사용량이 20~30% 감소합니다. |
스레드 새니타이저(TSan)(Android 사용 불가) | -EnableTSan | 경쟁 조건 등 스레딩 이슈를 탐지합니다. |
정의되지 않은 행동 새니타이저(UBSan) | -EnableUBSan | 아웃 오브 바운드 오류, 정수 오버플로, 초기화되지 않은 메모리 등 C++에서 정의되지 않은 행동으로 인식하는 모든 대상을 탐지합니다. |
MinUBSan(Android 전용) | -EnableMinUBSan | Android에 사용하기 위해 UBSan을 최소화한 버전입니다. |
메모리 새니타이저(MSan) (Linux only) | -EnableMSan | 초기화되지 않은 메모리에 대한 읽기 시도를 탐지합니다. |