클랭 새니타이저

Android 및 Linux 빌드에서 클랭 새니타이저를 사용하여 문제를 빠르게 진단합니다.

Choose your operating system:

Windows

macOS

Linux

언리얼 빌드 툴(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

초기화되지 않은 메모리에 대한 읽기 시도를 탐지합니다.