Android 디버깅 방법 및 Tip (Debug mode 사용하기)

2022. 1. 16. 22:27Android

반응형

앱에서 다양한 이슈로 디버깅을 하게 된다. 이때, 내 맘대로 앱이 동작을 하지 않는다면, 또는 원치 않는 오류가 발생한다면 그 문제가 어디서 생기는지, 이 메서드를 잘 타고 있는 것인지, 변수에 내가 생각한 값이 정상적으로 할당되고 있는지 등등~ 정말 다양한 이유로 디버깅을 해야 한다.

여기서는 안드로이드 스튜디오에서 제공하는 Debug mode 를 통해 디버깅을 하는 방법을 설명한다.

 

목차

     

    ℹ️  Android Studio Arctic Fox | 2020.3.1 Patch 4 기준으로 작성됨

    디버그 모드 사용 방법

    가장 먼저 코드의 특정 포인트에서 어떤 값이 들어가 있는지, 메소드는 잘 실행되고 있는지 등을 알기 위해 내가 확인하고 싶은 코드에 break point(중단점)를 걸어야 한다.

    break point(중단점) 걸기

    내가 확인하고 싶은 코드 줄에, 아래와 같이 좌측 줄번호 옆을 클릭해 빨간색 포인트(break point)를 찍는다.

    메서드에 break point를 찍으면, 아래와 같이 다이아몬드로 찍히는데, 이를 사용하면 속도가 많이 느려진다고 한다. 그래서 메서드 내부에 포인트를 찍는 것도 하나의 방법.

     

    디버깅 모드로 실행하기

    break point 걸고 벌레 모양 아이콘 선택한다.

    디버깅 모드 실행하기

     

    처음에는 일반모드로 실행했다가 도중에 에러가 떴을 경우 다시 디버깅 모드로 실행하려면 리소스가 많이 소모된다. 빌드를 새로 돌리고 기다려야 하니! 이럴 때는, 아래 버튼을 클릭해 기존에 실행되는 프로세스를 디버깅 모드로 전환할 수도 있다.

    실행 중 디버깅 모드 전환 방법 1
    실행 중 디버깅 모드 전환 방법 2

    이렇게 디버그 모드를 실행해 디버깅을 시작하고, 어떻게 디버깅 할 수 있는지는 이어서 설명한다.

     

    Debug 탭

    디버깅 모드를 실행하면 아래와 같이 하단에 Debug 탭이 생긴다.

     

    Debug > Debugger 탭에는 2개의 창이 뜨는데,

    • 좌측의 Frames : 현재 실행되는 코드의 스택 트레이스
    • 우측의 Variables : break point 에서의 변수값들.
      • 특정 변수의 값을 알고 싶으면, 해당 코드를 블록으로 잡은 후, Variables 탭에 드래그하면 해당 변수의 값을 볼 수 있다. 또는, 변수 위에 커서를 두면 해당 변수의 정보가 뜨고, + 클릭하면 해당 객체 내부 필드 정보를 확인할 수 있음.

     

     

    디폴트로 뜨는 Frames, Variables 외에 다른 창도 추가할 수 있다.

    아래와 같이 우측 아이콘을 클릭하면 추가할 수 있는 옵션들이 뜨고, 여기서 Threads, Overhead를 추가할 수 있다.

     

     

    디버깅 툴 아이콘 사용법

    Debug 탭에는 디버깅을 위한 여러 아이콘 버튼들이 있다. 각 아이콘에 대해 설명한다.

     

    Resume Program

    다음 중단점이 있을 때까지 앱을 실행함

     

     

    Show Execution Point

    클릭하면 현재 진행 중인 코드로 이동

     

     

    Step Over

    break point에서 코드의 다음 줄로 이동

     

     

    Step Into

    메서드 호출 내에서 첫 번째 줄로 이동

     

    Step Over 와의 차이점은,

    • step over는 줄단위의 코드들에 대해 디버깅
    • step into는 메서드 단위로 이동하도록

    보통은 메소드 안으로 들어가 step over로 디버깅하다가, 메서드를 디버깅하기 위해 step into 하면 된다.

     

     

    Force Step Into

    Settings의 "Debugger"옵션의 "Stepping"에 들어가면 "Do not step into the classes" 항목이 있다.

    Step Into의 경우 이 항목을 스킵하면서 디버깅을 실행하는데, 이와 다르게 Force Step Into는 모든 코드를 거치면서 디버깅을 하는 모드이다

     

     

    Step Out

    Step into 와 반대로, 현재 메서드 외부에서 다음 줄로 이동

     

     

    Drop Frame

    위에서 설명한 step into, step over 등의 기능을 사용하다 보면 break point를 지나칠 때가 있다. 이때 Drop Frame 기능을 사용하여 다시 처음부터 실행할 필요가 없이 break point 이전 상태로 돌아갈 수 있다.

     

     

    Run to Cursor

    디버깅을 하는 중에 커서가 있는 곳으로 바로 이동해서 디버깅을 진행할 수 있다

     

     

    Evaluate Expression

    break point로 captured 된 변수를 이용해 expression 또는 함수 등을 실행할 수 있다.

     

    예를 들어, Variables 탭 내 this 변수를 선택해두고, 계산기 아이콘을 클릭해 Evaluate 창에, 아래와 같이 this.increase() 실행을 통해 number 변수를 증가시킬 수 있다!

     

    또는, 아래와 같이 직접 변수 할당으로 number 변수 값을 변경시킬 수 있다.

     

     

    디버그 모드로 변수값 변경하기

    또는 아래와 같이 set value 를 통해 직접 변수 값을 변경할 수 있다.

    Variables 탭 내에서 원하는 변수를 선택 후, 우 클릭하면 아래와 같이 Set Value 를 클릭해 직접 변경할 수 있다.

     

     

    디버그 모드로 로그 출력하기

    Shift + 원하는 줄 선택(break point 찍듯이)하면 아래와 같은 설정 팝업이 뜬다.

    Log 부분에 Evaluate and log 체크박스에 체크하고, 해당 줄이 실행될 때 출력할 로그를 작성한다.

     

    그럼 debug 탭 > console 탭에서 확인 가능하다.

    위에서 “Breakpoint hit” message 를 체크해놓아서, 아래처럼 breakpoint reached at ~ 이라는 로그도 찍힌다.

     

     

    Bug Report

    앱에서 발생한 버그 리포트를 analyze stack trace에 붙여놓고, 관련 코드로 바로 이동할 수 있다.

    예를 들어, firebase crashlytics 등에서 얻은 버그 리포트를 복사하고, 안드로이드 스튜디오에서 Analyze > Stack Trace or Thread Dump 클릭 후, 아래와 같이 붙여 넣기를 하고 ok를 누르면,

     

    아래와 같은 stack trace를 얻을 수 있다. 이슈가 있는 코드로 바로 이동할 수 있다.

     


     

    이 외에 유용한 디버깅 방법들이 있다면 추가로 업데이트 할 예정이다. 

     

    반응형