Unity 게임의 Android 비정상 종료 및 ANR 기호화

Android에서 비정상 종료 및 ANR이 발생하면 비정상 종료가 일어난 시점까지 게임에서 호출된 일련의 중첩 함수를 스냅샷으로 보여주는 스택 트레이스가 생성됩니다. 이러한 스냅샷은 소스의 문제를 식별하고 해결하는 데 도움이 됩니다.

그러나 출시 모드에서 Unity로 게임을 빌드하면 기호가 APK로 패키징되지 않습니다. 게임이 다운되거나 ANR이 발생하면 호출 스택에는 메모리 주소만 표시됩니다.

예:

05-26 18:06:51.311: A/libc(26986): Fatal signal 11 (SIGSEGV) at 0x000004e4 (code=1), thread 27024 (Worker Thread)
05-26 18:06:51.411: I/DEBUG(242): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
05-26 18:06:51.411: I/DEBUG(242): Build fingerprint: 'Xiaomi/cancro_wc_lte/cancro:4.4.4/KTU84P/V6.7.1.0.KXDCNCH:user/release-keys'
05-26 18:06:51.411: I/DEBUG(242): Revision: '0'
05-26 18:06:51.411: I/DEBUG(242): pid: 26986, tid: 27024, name: Worker Thread  >>> com.u.demo <<<
05-26 18:06:51.411: I/DEBUG(242): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 000004e4
 I/DEBUG(242): backtrace:
 I/DEBUG(242):     #00  pc 006d4960  /data/app-lib/com.u.demo-1/libunity.so
 I/DEBUG(242):     #01  pc 006d4c0c  /data/app-lib/com.u.demo-1/libunity.so
 I/DEBUG(242):     #02  pc 006d4c0c  /data/app-lib/com.u.demo-1/libunity.so
 I/DEBUG(242):     #03  pc 006d4c0c  /data/app-lib/com.u.demo-1/libunity.so
 I/DEBUG(242):     #04  pc 006d4c0c  /data/app-lib/com.u.demo-1/libunity.so
 I/DEBUG(242):     #05  pc 001c5510  /data/app-lib/com.u.demo-1/libunity.so
 I/DEBUG(242):     #06  pc 001c595c  /data/app-lib/com.u.demo-1/libunity.so
 I/DEBUG(242):     #07  pc 001c4ec0  /data/app-lib/com.u.demo-1/libunity.so
 I/DEBUG(242):     #08  pc 0043a05c  /data/app-lib/com.u.demo-1/libunity.so
 I/DEBUG(242):     #09  pc 0000d248  /system/lib/libc.so (__thread_entry+72)
 I/DEBUG(242):     #10  pc 0000d3e0  /system/lib/libc.so (pthread_create+240)

Google Play는 Play Console에서 앱 버전마다 디버그 기호 파일을 업로드할 수 있도록 지원합니다. 이렇게 하면 비정상 종료 및 ANR을 분석하고 해결하기가 더 쉬워집니다.

Unity 2020.3 이상에서는 Unity의 안내에 따라 Android 기호를 생성한 다음 Google Play Console에 기호화 파일을 업로드하여 Android vitals 대시보드에서 사람이 읽을 수 있는 스택 트레이스를 볼 수 있습니다.

또는, Unity의 Android 비정상 종료 기호화 도움말에 따라 직접 스택 트레이스를 해결하거나 Unity의 더 낮은 버전에 맞는 기호 파일을 생성할 수도 있습니다.