관리되는 코드에서 예외가 발생하면 예외에 대한 스택 추적을 통해 예외의 원인을 이해할 수 있습니다. 하지만 관리되는 스택 추적은 경우에 따라 예상대로 표시되지 않을 수 있습니다. 스택 추적은 빌드 설정에 따라 달라집니다.
C++ Compiler Configuration 프로퍼티를 Debug로 설정하면 IL2CPP가 신뢰할 수 있는 관리되는 스택 추적을 보고하고 호출 스택에 각 관리되는 메서드를 포함합니다. 스택 추적에는 원본 C# 소스 코드의 줄 번호가 포함되지 않습니다.
C++ Compiler Configuration 프로퍼티를 Release 또는 Master로 설정하면 IL2CPP가 하나 이상의 관리되는 메서드가 누락된 호출 스택을 생성할 수 있습니다. 이는 C++ 컴파일러가 누락된 메서드를 인라이닝할 때 발생합니다. 메서드 인라이닝은 일반적으로 런타임 성능을 개선하지만, 이로 인해 호출 스택을 이해하기 어려울 수 있습니다.
IL2CPP는 항상 호출 스택에 하나 이상의 관리되는 메서드를 제공합니다. 관리되는 예외에서 생성된 스택 추적의 경우, 이는 예외가 발생한 메서드입니다. 다른 메서드도 인라이닝되지 않은 경우 포함됩니다.
관리되는 스택 추적에 파일 및 줄 번호 정보를 포함하려면 Edit > Project Settings > Player > Other Settings로 이동합니다. 그런 다음 Configuration 헤딩에서 IL2CPP Stacktrace Information 프로퍼티를 Method Name, File Name, Line Number로 설정합니다.
이 설정은 IL2CPP가 호출 스택에 모든 관리되는 스택 프레임을 포함하도록 합니다. 또한 해당 코드가 있는 관리되는 어셈블리(.dll)에 대해 관리되는 심볼 파일(.pdb)을 사용할 수 있는 한, 각 스택 프레임에는 적절한 C# 줄 번호도 포함됩니다.
이 기능을 활성화하면 빌드 시간과 빌드된 프로그램의 최종 크기가 약간 증가합니다. 플레이어 빌드 프로세스는 디버그 심볼 파일을 처리하고 필요한 심볼 형성을 포함하는 새 데이터 파일을 생성하는 추가 단계를 포함합니다. Unity는 이 데이터 파일을 구축된 플레이어에 제공하고 런타임 시 이 파일을 사용하여 호출 스택의 C# 줄 정보를 파악합니다.
이 기능을 활성화하면 인라이닝이 있더라도 Unity는 Release 또는 Master 설정에서 올바른 호출 스택을 생성합니다.
스크립트 디버깅을 활성화하려면 File > Build Profiles로 이동한 다음 Script Debugging 체크박스를 활성화합니다. 스크립트 디버깅이 활성화되면 IL2CPP는 메서드, 파일, 줄 번호와 함께 올바른 관리되는 스택 추적을 보고합니다. 이로 인해 프로그램 크기가 커지고 성능이 저하됩니다.
스택 추적만 개선하려면 스크립트 디버깅을 활성화해서는 안 됩니다. 대신 위에서 설명한 대로 소스 코드 줄 번호를 활성화합니다.