Version: 2017.2
모바일 개발자 체크리스트
프로파일링

충돌

충돌 발생 시 체크리스트

  • 코드 스트리핑을 비활성화합니다(또한 iOS의 경우 “예외와 함께 느리게”로 설정).
  • 내장된 iOS 플레이어의 크기 최적화(iphone-playerSizeOptimization) 지침에 따라 게임이 iOS의 스트리핑과 충돌하지 않는지 확인합니다.
  • 메모리 부족으로 인한 것이 아닌지 확인(장치를 다시 시작하고 플랫폼에 최대 RAM이 있는 장치를 사용하고 로그 확인)합니다.

Editor.log - 에디터의 경우

디버그 메시지, 경고 및 오류는 모두 콘솔로 이동합니다. 또한 Unity는 상태 보고서(에셋 로드, 모노 초기화, 그래픽스 드라이버 정보)를 콘솔에 출력합니다.

무슨 일이 벌어지고 있는지 알고 싶으면 editor.log를 확인합니다. editor.log에서는 콘솔 조각이 아닌 전체 그림을 얻을 수 있으므로 어떤 문제가 발생했는지 알 수 있으며 코딩 세션의 전체 로그를 볼 수 있습니다. 이렇게하면 Unity 충돌이 발생한 원인을 추적하거나 에셋의 문제를 찾아내는 데 도움이 됩니다.

Unity는 또한 장치에 몇 가지 정보를 출력합니다(iOS 장치의 Android용 로그캣 콘솔 및 Xcode gdb 콘솔).

Android 디버깅

  1. DDMS 또는 ADB 툴을 사용합니다.
  2. 스택트레이스를 지켜봅니다(Android 3 이상). c++filt(ndk 의 일부) 또는 http://slush.warosu.org/c++filtjs와 같은 다른 메서드를 사용하여 변환된 함수 호출을 디코딩합니다.
  3. 충돌이 발생한 .so 파일을 확인합니다.
    1. libunity.so - Unity 코드 또는 사용자 코드에서 충돌이 발생했습니다.
    2. libdvm.so - Java 월드의 어딘가에서 Dalvik과 함께 크래시가 발생했습니다. 따라서 Dalvik의 스택트레이스를 찾아야 합니다. JNI 코드 또는 Java와 관련된( AndroidManifest.xml 에 대한 가능한 변경 사항 포함) 모든 것을 살펴야 합니다.
    3. libmono.so - Mono 버그이거나 Mono가 허용하지 않는 행동을 수행하고 있습니다.
  4. 크래시 로그 분해를 통해 어떤 문제가 발생했는지 대략적으로 알아볼 수 없었다면,
    1. 다음과 같이 Android NDK의 ARM EABI 툴을 사용할 수 있습니다. objdump.exe -S libmono.so >> out.txt
    2. 스택트레이스의 pc 주변 코드를 확인합니다.
    3. 새로운 out.txt 파일에서 해당 코드를 일치시켜야 합니다.
    4. 위로 스크롤하여 크래시가 발생한 함수에서 무슨 일이 일어나고 있는지 확인합니다.

iOS 디버깅

  1. Xcode에는 툴이 내장되어 있습니다. Xcode 4에는 크래시 디버깅을 위한 뛰어난 GUI가 있으며 Xcode 3에는 약간 덜합니다.

  2. 전체 gdb 스택 - 모든 스레드 역추적

  3. soft-null-check 사용: 개발 빌드 및 스크립트 디버깅을 사용합니다. 이제는 잡히지 않은 null ref 예외가 적절하게 관리되는 호출 스택과 함께 Xcode 콘솔에 인쇄됩니다.

  4. “빠른 스크립트 호출” 및 코드 스트리핑을 해제해야 합니다. 일부 희귀한 .Net 함수 또는 반사를 사용하여 발생하는 것과 같은 임의의 충돌을 중지시킬 수 있습니다.

전략

  1. 충돌이 발생한 스크립트를 파악하고 장치에서 모노 개발을 사용하여 디버깅해야 합니다.
  2. 충돌이 코드에 없는 것처럼 보일 경우 스택트레이스를 자세하게 살펴보면 어떤 일이 발생했는지 알 수 있습니다. 사본을 받아 제출하면 Unity에서 이를 검토하겠습니다.
모바일 개발자 체크리스트
프로파일링