Android/Framework

Android 디버깅 기법

임베디드 친구 2025. 4. 21. 14:02
728x90
반응형

Android 디버깅 기법

Android 개발에서는 다양한 디버깅 기법이 필요합니다. 특히, 복잡한 시스템 구조를 가진 Android 환경에서는 단순한 로그 출력만으로는 문제를 해결하기 어려운 경우가 많습니다. 따라서, Logcat을 비롯하여 dumpsys, strace, systrace 등의 도구를 활용하여 보다 효과적으로 디버깅을 수행할 수 있습니다. 본 글에서는 이러한 도구들을 활용한 디버깅 기법을 소개하고 AOSP(Android Open Source Project) 코드와 함께 실무에서의 활용 방법을 설명하겠습니다.

1. Logcat을 활용한 디버깅

Logcat은 Android의 기본 로그 시스템으로, 시스템 로그를 확인하고 애플리케이션 실행 중 발생하는 오류나 동작을 분석하는 데 사용됩니다.

1.1 Logcat 기본 사용법

Logcat은 Android Debug Bridge(adb)를 통해 실행할 수 있으며, 기본적인 사용법은 다음과 같습니다.

adb logcat

이 명령을 실행하면 Android 기기에서 발생하는 모든 로그가 출력됩니다. 그러나 필요하지 않은 로그까지 출력되므로 특정 태그나 우선순위를 설정하여 필터링하는 것이 좋습니다.

1.2 특정 태그의 로그 확인

adb logcat -s MyAppTag

위 명령어는 "MyAppTag"로 태그된 로그만 출력하도록 설정합니다.

1.3 로그 레벨 설정

Android 로그는 다음과 같은 레벨을 가집니다.

  • V (Verbose): 가장 상세한 로그
  • D (Debug): 디버깅 정보를 포함한 로그
  • I (Info): 일반적인 정보 로그
  • W (Warning): 경고 로그
  • E (Error): 오류 로그
  • F (Fatal): 심각한 오류 로그

특정 레벨 이상의 로그만 출력하려면 다음과 같이 설정할 수 있습니다.

adb logcat *:E

위 명령어는 Error 이상 레벨의 로그만 출력합니다.

1.4 logcat을 파일로 저장

디버깅 중 기록을 남겨야 할 경우, 로그를 파일로 저장할 수 있습니다.

adb logcat -d > log.txt

이 명령을 실행하면 log.txt 파일에 로그가 저장됩니다.

2. dumpsys를 활용한 디버깅

dumpsys는 Android 시스템 서비스의 상태를 출력하는 명령어입니다. 시스템 리소스 사용량, 서비스 동작 상태 등을 분석하는 데 유용합니다.

2.1 기본 사용법

adb shell dumpsys

위 명령어를 실행하면 모든 시스템 서비스의 상태가 출력됩니다. 특정 서비스만 확인하고 싶다면 해당 서비스 이름을 추가하면 됩니다.

2.2 특정 서비스 상태 확인

예를 들어, Activity Manager의 상태를 확인하려면 다음과 같이 입력합니다.

adb shell dumpsys activity

서비스 목록을 확인하려면 아래 명령어를 사용할 수 있습니다.

adb shell dumpsys | grep "DUMP OF SERVICE"

2.3 메모리 상태 확인

Android 시스템의 메모리 사용 상태를 확인하려면 아래 명령어를 사용합니다.

adb shell dumpsys meminfo

특정 앱의 메모리 사용량을 확인하려면 패키지명을 지정합니다.

adb shell dumpsys meminfo com.example.myapp

3. strace를 활용한 시스템 호출 분석

strace는 프로세스에서 발생하는 시스템 호출을 추적하는 도구로, 프로세스가 커널과 상호작용하는 방식을 분석하는 데 유용합니다.

3.1 특정 프로세스의 시스템 호출 추적

adb shell strace -p <pid>

위 명령어는 특정 PID를 가진 프로세스의 시스템 호출을 실시간으로 추적합니다. PID는 다음 명령어로 확인할 수 있습니다.

adb shell ps | grep <패키지명>

3.2 특정 함수 호출만 추적

예를 들어, 파일 입출력 관련 호출만 추적하려면 다음과 같이 입력합니다.

adb shell strace -e open,read,write -p <pid>

4. systrace를 활용한 성능 분석

systrace는 Android 프레임워크 및 커널 레벨에서 시스템 성능을 분석할 때 사용됩니다. 주로 애플리케이션 성능 저하 원인을 파악하는 데 활용됩니다.

4.1 systrace 기본 사용법

systrace는 Python 기반 스크립트를 사용하여 실행할 수 있습니다. 먼저, Android SDK의 platform-tools 디렉터리로 이동한 후 다음 명령을 실행합니다.

python systrace.py --time=10 -o trace.html sched gfx view

위 명령은 10초 동안 스케줄러(sched), 그래픽 렌더링(gfx), 뷰 시스템(view) 관련 이벤트를 추적하고 trace.html 파일에 저장합니다.

4.2 systrace 결과 분석

trace.html 파일을 웹 브라우저에서 열면, 시간축에 따라 시스템 이벤트가 시각화됩니다. 이를 통해 프레임 드롭, UI 응답 지연 등의 원인을 분석할 수 있습니다.

5. AOSP 코드 활용 예시

디버깅을 위해 AOSP 소스를 참고하면 더욱 심층적인 분석이 가능합니다. 예를 들어, Logcat이 출력하는 로그의 출처를 확인하려면 해당 로그 태그를 검색하여 소스 코드를 찾을 수 있습니다.

다음 명령어를 활용하면 특정 태그가 포함된 소스 파일을 찾을 수 있습니다.

grep -r "MyAppTag" /path/to/AOSP/source

또한, dumpsys 명령어가 출력하는 정보를 확인하려면 관련 서비스 코드를 찾아볼 수 있습니다. 예를 들어, Activity Manager 서비스는 frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java 파일에서 확인할 수 있습니다.

결론

Android 개발에서 효과적인 디버깅은 필수적인 기술입니다. Logcat을 활용한 기본적인 로그 분석부터 dumpsys, strace, systrace를 활용한 성능 분석까지 다양한 도구를 사용할 수 있습니다. 또한, AOSP 코드를 활용하면 보다 깊이 있는 디버깅이 가능하므로 필요할 때마다 참고하는 것이 좋습니다. 실무에서 이러한 기법들을 적극 활용하여 디버깅 및 성능 최적화를 수행하시길 바랍니다.

728x90
반응형

'Android > Framework' 카테고리의 다른 글

Android 시스템 최적화  (0) 2025.04.23
커널 로그 분석 및 디버깅  (0) 2025.04.22
Android 디바이스 포팅  (0) 2025.04.20
AOSP 소스 코드 수정 및 커스텀 기능 추가  (0) 2025.04.19
AOSP 빌드 및 환경 설정  (0) 2025.04.17