본문 바로가기

운동하는 개발자/Android

android adb를 이용한 native bug tracking (Android Debug Bridge 사용법)

728x90

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 환경 변수 등록하기)

 

windows 10, 11 환경 변수 등록(adb.exe 환경 변수 등록하기)

커맨드 명령어로 실행되는 것들은 꼭 그 exe의 해당경로를 찾아가기 번거로운것들이 많다 환경변수에 등록해두면 어느 경로에서든 실행 할 수 있어 편하다 이번엔 Android Debug Bridge인 adb를 등록해

singo112ok.tistory.com

 

사용법은 간단하다 

 

adb bugreport

실제 안드로이드 모바일기기를 연결해서 테스트했던 AVD로 테스트했던 해당 연결된 장비를 둔 채로 위 명령을 친다

이러면 기본적으로 해당경로에 bugreport.zip 파일이 생성되고 열어보면

이런식으로 구성되어있고 우리가 봐야할껀 bugreport-[날짜 시간].txt 파일이다

※ 테스트로 가지고있는 갤럭시 S8(안드로이드9)의 경우에는 adb shell bugreport라고 치면 저 텍스트 내용이 즉시 출력된다 실제 사용중인 갤럭시 S22(안드로이드13)의 경우엔 shell 명령이 사용 불가능하니 혹시 구형폰이 있다면 shell 명령으로 편리하게 바로 출력할 수 있다는것만 알아두자 (adb shell bugreport >> "C:\temp\dump.txt")

해당 파일을 열어서 "Tombstone"을 검색하면 아래와 같이 볼 수 있다

출처 : source android (https://source.android.com/docs/core/tests/debug?hl=ko)

위 backtrace를 보면 콜 스텍이 쌓여있는데 위 화면에서 보면 #06 부터 시간의 순서대로 스텍이 쌓여 #00이 가장 최근에 실행된 내용이라고 보면된다 실제론 함수명까지도 보여서 Logcat만 봤을때 보다 훨씬 자세하게 버그추적 접근이 가능하다


https://source.android.com/docs/core/tests/debug?hl=ko 

 

네이티브 Android 플랫폼 코드 디버깅  |  Android 오픈소스 프로젝트  |  Android Open Source Project

네이티브 Android 플랫폼 코드 디버깅 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 섹션에서는 플랫폼 수준 기능을 개발할 때 네이티브 Android 플랫폼 코

source.android.com

 

728x90