android adb를 이용한 native bug tracking (Android Debug Bridge 사용법)
native 코드를 사용하는 android앱 개발 중 앱 crash 가 발생 하며 해당 앱이 강제 종료되었고 LogCat에는 다음과 같이 남아 있었다
??? 마지막찍혀있는 로그는 특정 클래스의 소멸자 로그로 더 이상 추적이 불가능한 상황이였다
C++로 되어진 Native 코드를 라이브러리로 참조하기에 디버깅도 불가능했다
방법을 찾아보던중 adb를 이용해서 BugReport를 받아 볼 수 있다는걸 알게 되었다
우선 adb는 보통 SDK설치 경로쪽에 존재하는데 나처럼 android studio에서 함께 설치되었다면
[해당 디스크]\Users\[사용자명]\AppData\Local\Android\Sdk\platforms-tools
이 경로에 adb.exe파일이 있을것이다
커맨드 명령어를 사용해야 하는데 해당경로로 매번 옮기기 귀찮으니 환경변수를 우선 등록해준다
2022.12.15 - [운동하는 개발자/Windows] - windows 10, 11 환경 변수 등록(adb.exe 환경 변수 등록하기)
사용법은 간단하다
adb bugreport
실제 안드로이드 모바일기기를 연결해서 테스트했던 AVD로 테스트했던 해당 연결된 장비를 둔 채로 위 명령을 친다
이러면 기본적으로 해당경로에 bugreport.zip 파일이 생성되고 열어보면
이런식으로 구성되어있고 우리가 봐야할껀 bugreport-[날짜 시간].txt 파일이다
※ 테스트로 가지고있는 갤럭시 S8(안드로이드9)의 경우에는 adb shell bugreport라고 치면 저 텍스트 내용이 즉시 출력된다 실제 사용중인 갤럭시 S22(안드로이드13)의 경우엔 shell 명령이 사용 불가능하니 혹시 구형폰이 있다면 shell 명령으로 편리하게 바로 출력할 수 있다는것만 알아두자 (adb shell bugreport >> "C:\temp\dump.txt")
해당 파일을 열어서 "Tombstone"을 검색하면 아래와 같이 볼 수 있다
위 backtrace를 보면 콜 스텍이 쌓여있는데 위 화면에서 보면 #06 부터 시간의 순서대로 스텍이 쌓여 #00이 가장 최근에 실행된 내용이라고 보면된다 실제론 함수명까지도 보여서 Logcat만 봤을때 보다 훨씬 자세하게 버그추적 접근이 가능하다
https://source.android.com/docs/core/tests/debug?hl=ko