2016년 5월 6일 금요일

Tizen Native app 개발 시 crash information에서 crash point file, line number 확인 방법

Tizen Native App의 crash 발생 시
crash information을 통해 crash가 발생된 file과 위치(line number)를 확인하는 방법을 정리함.

Native app 개발 하다 보면 Crash를 자주 보게 되는데
그냥 log만 사용해서 확인하자니 빌드 및 실행, 로그 추가로 좀 비효율적임.

다른 디버깅 방법으로 crash 발생 시 생성되는 crash information 중  callstack과
linux에서 개발을 하여 shell을 사용할 수 있다면
간단하게 crash가 발생한 위치를 addr2line을 사용하여 파악할 수 있다.



[Crash information 획득]


Tizen SDK를 사용하고 단말(Gear S2)가 연결이 되어 있는 상태라면
Crash 발생 시 자동으로 SDK에서 call stack view(Window > Show View > Call Stack)를 통해서 보여주게 된다.

Call Stack View를 통해 Crash information, Call stack, Crash 발생 당시 Log를 확인 가능하며
아래 사진은 Sample app을 사용하여 crash를 발생 시킨 것이라 다소 call stack depth가 얕다.

그리고 call stack 내에 app의 binary(ex basicuiw)의 실행 내역이 포함되어 있어야 해당 실행 주소를 사용하여 위치를 확인할 수 있다.




Callstack Information (PID:32525)
Call Stack Count: 1
 0: create_base_gui + 0x1c9 (0x4155e13a) [/opt/usr/apps/org.example.basicuiw/bin/basicuiw] + 0x113a
End of Call Stack


Call Stack에서 basicuiw 앱의 create_base_gui 함수에서 발생되었고 주소는 0x113a임을 알 수 있다.
이를 addr2line을 사용하여 확인하려면 다음과 같이 실행한다.
* 다만 여기서 사용하는 앱 바이너리(basicuiw) crash가 발생된 bianry와 같아야 한다.
   만약 crash 발생 이후 다시 컴파일을 했다면 위치를 확인하기가 어렵다.

hhh@:~/workspace_tizen/BasicUIw/Debug$ pwd
/home/hhh/workspace_tizen/BasicUIw/Debug
hhh@:~/workspace_tizen/BasicUIw/Debug$ addr2line -C -f -e basicuiw 0x113a
create_base_gui
/home/hhh/workspace_tizen/BasicUIw/Debug/../src/basicuiw.c:71

Crash는 basicuiw.c의 71번 line에서 발생한 것을 확인하였고
해당 위치를 확인하면 다음과 같이 crash가 발생하도록 작성한 코드가 맞음을 알 수 있음.




참고로 crash information들은 다음의 위치들에 저장이 된다.
SDK가 설치된 host pc의 app project 내 crash-info 폴더(연결 중 crash가 발생했다면)나
단말내 /opt/usr/share/crash/report 에서 확인할 수 있다.



댓글 없음:

댓글 쓰기