[Android] 안드로이드에서 예외(Exceptions) 추적하기

2025. 9. 17. 12:27·Android

안드로이드 앱 개발 과정에서 예외 추적은 매우 중요한 작업입니다. 예외를 제대로 기록하고 분석해야 문제를 재현하고, 근본 원인을 찾아내어 더 안정적인 앱을 만들 수 있습니다. 이번 글에서는 안드로이드에서 예외를 추적하는 다양한 방법을 정리해 보겠습니다.

 

1. Logcat을 이용한 예외 로깅

가장 기본적인 방법은 Logcat을 활용하는 것입니다.
예외가 발생하면 시스템은 예외 유형, 메시지, 발생 코드 줄, 스택 트레이스를 Logcat에 출력합니다.
Logcat에서 E/AndroidRuntime 키워드로 필터링하면 예외 로그만 집중적으로 확인할 수 있습니다.

 

2. try-catch로 예외 처리 및 로깅

앱이 크래시로 이어지지 않도록 방지하려면 try-catch 블록을 적절히 활용해야 합니다.
예외 발생 시 로그를 남기면 문제 분석이 훨씬 쉬워집니다.

try {
    val result = performRiskyOperation()
} catch (e: Exception) {
    Log.e("Error", "Exception occurred: ${e.message}", e)
}

이렇게 하면 예외 메시지와 스택 트레이스가 Logcat에 출력되어 추적이 용이합니다.

 

3. 전역 예외 핸들러 (Global Exception Handler)

앱 전체에서 발생하는 처리되지 않은 예외(Uncaught Exception) 를 포착하려면
Thread.setDefaultUncaughtExceptionHandler를 설정할 수 있습니다.

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()

        val defaultHandler = Thread.getDefaultUncaughtExceptionHandler()

        Thread.setDefaultUncaughtExceptionHandler { thread, exception ->
            Log.e("GlobalHandler",
                "Uncaught exception in thread ${thread.name}: ${exception.message}", exception)

            // Crashlytics 같은 외부 서비스로 전송 가능
            // FirebaseCrashlytics.getInstance().recordException(exception)

            // 기존 기본 핸들러 호출 (선택)
            defaultHandler?.uncaughtException(thread, exception)
        }
    }
}

이 방법은 QA나 디버깅 환경에서 특히 유용합니다.
예외를 중앙 집중식으로 관리하고, 필요하다면 서드파티 서비스(Crashlytics 등) 로 전송할 수도 있습니다.

 

4. Firebase Crashlytics 사용

프로덕션 환경에서 가장 널리 쓰이는 방법은 Firebase Crashlytics입니다.
Crashlytics는 처리되지 않은 예외를 자동으로 기록하고, 스택 트레이스, 기기 상태, 사용자 세션 정보까지 포함한 보고서를 제공합니다.

try {
    val data = fetchData()
} catch (e: IOException) {
    FirebaseCrashlytics.getInstance().recordException(e)
}

Crashlytics를 사용하면 크래시 발생 비율, 발생 조건, 사용자 영향 범위를 한눈에 파악할 수 있습니다.

 

5. 브레이크포인트(Breakpoints)를 활용한 디버깅

개발 중이라면 Android Studio의 디버깅 기능이 강력한 도구가 됩니다.

  • 코드 특정 지점에 브레이크포인트 설정
  • 실행 중 앱 상태(변수 값, 호출 스택, 객체 상태) 실시간 확인
  • 예외 발생 직전의 흐름 추적

이 방식은 개발 단계에서 원인을 좁혀가는 과정에 매우 유용합니다.

 

6. 버그 리포트(Bug Report) 캡처

운영 환경에서 예외 상황을 재현하기 어렵다면, 버그 리포트를 캡처하는 것도 좋은 방법입니다.
ADB 또는 기기 자체에서 버그 리포트를 생성하면, 로그와 시스템 상태를 함께 얻을 수 있습니다.

  • 개발자 옵션 → 버그 신고 기능 활용
  • 에뮬레이터 확장 컨트롤에서 버그 리포트 저장
  • ADB 명령어
adb bugreport /path/to/save/bugreport.zip

생성된 ZIP 파일에는 logcat, dumpsys, dumpstate 등 진단에 필요한 정보가 포함됩니다.

 

정리

안드로이드에서 예외 추적을 위한 방법은 다양합니다. 이 도구들을 적절히 조합하면 개발 단계부터 프로덕션 운영까지 포괄적인 예외 관리 체계를 구축할 수 있습니다.

 

참고

  • Manifest Interview Android
반응형

'Android' 카테고리의 다른 글

[Jetpack Compose] Lazy List, 대용량 아이템 리스트 처리하기  (0) 2026.02.01
[Android] 안드로이드의 Looper, Handler, HandlerThread 이해하기  (0) 2025.09.17
[Android] 런타임 권한(runtime permissions) 처리  (1) 2025.09.14
[Android] SparseArray에 대하여  (0) 2025.09.14
[Android] ActivityManager란?  (0) 2025.09.13
'Android' 카테고리의 다른 글
  • [Jetpack Compose] Lazy List, 대용량 아이템 리스트 처리하기
  • [Android] 안드로이드의 Looper, Handler, HandlerThread 이해하기
  • [Android] 런타임 권한(runtime permissions) 처리
  • [Android] SparseArray에 대하여
yenim
yenim
    반응형
  • yenim
    FOREST, FOR REST
    yenim
  • 전체
    오늘
    어제
    • 분류 전체보기 (235)
      • Android (9)
      • Baekjoon (142)
        • 구현 (3)
        • 브루트포스 (10)
        • BFS (12)
        • DFS (13)
        • 백트래킹 (3)
        • DP (26)
        • 최소 스패닝 트리 (1)
        • 이분 탐색 (10)
        • 그리디 알고리즘 (12)
        • 투포인터 (2)
        • 슬라이딩 윈도우 (2)
        • 다익스트라 (1)
        • 시뮬레이션 (6)
        • 분할 정복 (3)
        • 문자열 (9)
        • 정렬 (6)
        • 탐색 (2)
        • 수학 (20)
        • 링크드리스트 (1)
      • 프로그래머스 (15)
        • 구현 (4)
        • 브루트포스 (4)
        • DFS (1)
        • DP (1)
        • HEAP (1)
        • 문자열 (3)
        • 해시 (0)
        • 비트 (1)
      • CS (39)
        • 개발상식 (9)
        • 자료구조 (8)
        • 네트워크 (7)
        • 운영체제 (5)
        • 데이터베이스 (4)
        • 디자인패턴 (1)
        • 알고리즘 (5)
      • Programming Languages (3)
        • C & C++ (2)
        • Kotlin (1)
      • 취준 (7)
      • Git (2)
      • Google Online Challenge (4)
      • 에러 해결 (6)
      • WEB (0)
      • NOTE (3)
      • DIARY (3)
      • 알고리즘 (1)
  • 블로그 메뉴

    • 🏡 HOME
    • ✏️ TIL
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    문자열
    BFS
    그래프
    DFS
    깊이우선탐색
    DP
    명품 자바프로그래밍
    코테
    백준
    CS
    브루트포스
    너비우선탐색
    그리디 알고리즘
    프로그래머스
    다이나믹 프로그래밍
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
yenim
[Android] 안드로이드에서 예외(Exceptions) 추적하기
상단으로

티스토리툴바