250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- android
- Kotlin
- Navigation
- textview
- Dialog
- intent
- activity
- viewmodel
- drift
- TEST
- 앱바
- binding
- textfield
- Button
- data
- appbar
- CustomScrollView
- ScrollView
- 계측
- scroll
- 안드로이드
- Coroutines
- LifeCycle
- 테스트
- tabbar
- livedata
- 앱
- DART
- Flutter
- Compose
Archives
- Today
- Total
Study Record
[안드로이드] 디버깅 살펴보기 본문
728x90
😶 개요
앱 비정상 종료, 기능 동작 안함 등과 같이 개발자가 의도하지 않은 동작을 발생시키는 소프트웨어 오류를 버그라고 한다. 개발자가 코드를 작성하는 과정에서 버그가 있기 마련이다. 따라서, 이 버그를 식별하고 수정하는 것이 Android 개발자에게 중요한 기술 중 하나이다.
버그를 수정하는 프로세스를 디버깅이라고 하며 Android 스튜디오에는 여러가지 디버깅 도구가 있다.
😶 Log Class
Android 앱에서 출력 로깅 권장사항은 Log 클래스를 사용하는 것이다. Log.v(), Log.d(), Log.i(), Log.w(), Log.e() 등 여러가지 출력 로깅 함수를 사용할 수 있고 이 함수들은 태그와 로그 메시지, 이렇게 2가지 매재변수가 필요하다.
val TAG = "DEBUG_ERROR"
Log.d(TAG, "The Debug Error")
출력 로깅 함수들은 서로 다른 로그 수준을 사용한다.
로그 수준 | 사용 사례 | 예 |
ERROR | 심각한 오류 발생 보고 (ex. 비정상 종료) | Log.e() |
WARN | 오류보단 덜 심각하지만 심각한 오류를 방지하기 위해 수정해야 하는 사항 보고 (ex. 지원 중단된 함수) | Log.w() |
INFO | 성공적으로 완료되는 작업과 같은 유용한 정보 제공 | Log.i() |
DEBUG | 문제를 조사할 때 도움이 될만한 정보가 포함되며 출시 빌드에는 포함되지 않음 | Log.d() |
VERBOSE | 가장 포괄적인 로그 수준으로 출시 빌드에 초함되지 않음 | Log.v() |
😶 스택 트레이스
비정상 종료(예외)를 설명하는 오류 로그를 스택 트레이스라고 부른다. 가장 최근부터 예외에 이르기까지 호출된 모든 함수를 표시해준다.
한 함수가 다른 함수를 호출하면 두번째 함수가 완료될 때까지 첫번째 함수의 코드를 실행하지 않는다. 두번째 함수가 완료되면 첫번째 함수가 중단된 부분부터 재개된다. 두번째 함수에서 세번째 함수를 호출한다면 마찬가지로 세번째 함수가 호출될 때까지 두번째 함수도 중단된다. 이렇게 계속 카드를 쌓는 것과 비슷하게 코드(함수)들이 스택처럼 쌓인다.
따라서, 스택 트레이스처럼 가장 최근부터 예외에 이르기까지 호출된 모든 함수를 표시해주는 기법이 복잡한 문제를 디버그할 수 있도록 한다.
Process: com.example.debugging, PID: 14581
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.debugging/com.example.debugging.MainActivity}: java.lang.ArithmeticException: divide by zero
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: java.lang.ArithmeticException: divide by zero
at com.example.debugging.MainActivity.division(MainActivity.kt:21)
at com.example.debugging.MainActivity.onCreate(MainActivity.kt:14)
at android.app.Activity.performCreate(Activity.java:8000)
at android.app.Activity.performCreate(Activity.java:7984)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
728x90
'안드로이드' 카테고리의 다른 글
[안드로이드] RadioButton, RadioGroup 살펴보기 (0) | 2023.07.11 |
---|---|
[안드로이드] 문자열 따로 저장하고 불러오기(strings.xml) (0) | 2023.07.03 |
[안드로이드] 자동화 테스트 기본 사항 (0) | 2023.06.30 |
[안드로이드] lifecycle library 사용하기 (0) | 2023.06.29 |
[안드로이드] terminal 에서 adb 명령어가 없을 경우 (0) | 2023.06.29 |