앱이 실행 중 크래쉬됐을 때는 크래쉬 덤프(crash dump)를 확인하면 대강의 원인을 파악할 수 있다. 이를 위해 ‘Addr2line’ 라는 툴을 사용한다. Addr2line 툴은 명령어 주소와 실행 이미지를 파일 이름, 함수 이름, 소스 라인 번호로 변환하는 유틸리티이다. NDK는 ‘arm-linux-androideabi-addr2line’ 라는 이름으로 해당 툴을 제공한다.
먼저 아래 그림과 같이 사용자 계정의 루트 디렉토리로 이동한 뒤 편집기로 .bash_profile 파일을 연다.
그리고 PATH 에 ‘arm-linux-androideabi-addr2line’ 툴이 있는 디렉토리를 다음과 같이 추가한다.
export PATH=${PATH}:$NDK_ROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin |
여기서 ‘$NDK_ROOT’ 는 NDK가 설치된 디렉토리를 의미한다. 각자 환경에 맞게 절대 경로를 넣는다. 설정을 마쳤으면 현재 프로젝트의 /proj.android 디렉토리로 이동한 뒤 아래와 같이 Addr2line를 실행한다.
arm-linux-androideabi-addr2line -C -f -e obj/local/armeabi/libXXX.so <address> |
libXXX.so 는 게임 소스 라이브러리를 의미하며 기본으로 설정된 이름을 수정하지 않았다면 libgame.so 다. <address>는 앱이 크래쉬됐을 때 이클립스 LogCat에 출력되는 주소 값이다.
아래 그림은 앱이 크래쉬됐을 때 LogCat에 출력되는 로그다. 하이라이트된 라인의 000e6c54가 크래쉬된 코드의 주소 값이다.
이 주소 값을 Addr2line 툴에 넘겨주고 실행해 보면 아래 그림과 같이 문제가 된 파일명인 ‘HelloWorldScene.cpp’과 ‘76’ 이라는 라인 정보, 그리고 멤버 함수명인 ‘HelloWorld::init()’ 까지 출력된다.
이것으로 세 번에 걸친 Cocos2d-x 안드로이드 디버깅 연재를 마치겠다.
'개발 > Cocos2d-x' 카테고리의 다른 글
[Cocos2d-x] 안드로이드 디버깅 #2 - 브레이크 포인트(break point) (0) | 2013.02.13 |
---|---|
[Cocos2d-x] 안드로이드 디버깅 #1 - 이클립스 LogCat (0) | 2013.02.12 |
[Cocos2d-x] 이클립스에서 JAVA / C++ 혼합 프로젝트 설정하기 #2 (6) | 2012.10.23 |
[Cocos2d-x] 이클립스에서 JAVA / C++ 혼합 프로젝트 설정하기 #1 (2) | 2012.10.16 |
[Cocos2d-x] 2.0.x 버젼 통합 프로젝트(iOS & Android) 만들기 (4) | 2012.10.05 |
댓글