안드로이드 스튜디오 디버깅, 어렵지 않아요! 앱 문제 해결의 A to Z

 안녕하세요! 안드로이드 앱 개발을 하다 보면 예상치 못한 버그나 오류를 마주하게 됩니다. 이때 개발자에게 가장 강력한 도구가 바로 '디버깅'입니다. 안드로이드 스튜디오에서 디버깅하는 방법을 단계별로 자세히 알려드릴게요. 이 글을 통해 앱 문제 해결 능력을 한 단계 업그레이드해보세요!




1. 디버깅의 시작, 브레이크포인트 설정!

디버깅은 특정 코드 라인에서 앱의 실행을 잠시 멈추게 하는 '브레이크포인트' 설정에서 시작됩니다.

  • 설정 방법: 코드를 작성하는 에디터의 왼쪽 여백(줄 번호 옆)을 마우스로 클릭하면 빨간색 원이 생기는데, 이것이 바로 브레이크포인트입니다.







  • 왜 필요할까요?: 특정 변수의 값이 제대로 들어오는지 확인하거나, 특정 함수가 의도대로 호출되는지 살펴보고 싶을 때 유용합니다. 앱의 현재 상태를 자세히 들여다볼 수 있게 해줍니다.


2. 디버깅 모드로 앱 실행하기

일반적으로 앱을 실행하는 'Run' 버튼 대신, 디버깅 모드로 앱을 실행해야 합니다.

  • 메뉴 이용: 상단 메뉴에서 Run > Debug 'app'을 선택합니다.

  • 툴바 버튼 이용: 안드로이드 스튜디오 툴바에서 벌레 모양의 'Debug App' 아이콘을 클릭해도 됩니다.


이렇게 실행하면 앱이 선택한 에뮬레이터나 실제 기기에서 실행되다가, 설정한 브레이크포인트에 도달하는 순간 잠시 멈춥니다.


3. 디버그 툴 윈도우, 디버깅의 핵심!

앱이 브레이크포인트에서 멈추면, 안드로이드 스튜디오 하단에 "Debug" 툴 윈도우가 자동으로 나타납니다. 이곳은 디버깅에 필요한 모든 핵심 정보들을 제공하는 곳입니다.

주요 탭과 기능은 다음과 같습니다.


  • Console: 앱의 로그캣 메시지나 디버거 메시지를 확인할 수 있습니다.

    Log.d(), Log.e() 등으로 출력한 메시지를 여기서 볼 수 있어요.

  • Debugger: 디버깅의 꽃이라고 할 수 있습니다.

    • Frames (Call Stack): 현재 앱이 어떤 함수를 거쳐서 이 위치에 도달했는지 실행 흐름을 보여줍니다. 각 프레임을 클릭하면 해당 함수 호출 지점으로 이동하여 당시의 변수 값도 확인 가능합니다.

    • Variables: 현재 브레이크포인트 지점에서 접근할 수 있는 모든 변수의 현재 값을 실시간으로 보여줍니다. 객체의 경우 내부 필드까지 펼쳐서 볼 수 있습니다.

    • Watches: 특정 변수나 복잡한 표현식의 값을 지속적으로 모니터링하고 싶을 때 사용합니다. '+' 버튼을 눌러 추가하면 됩니다.

  • Breakpoints: 현재 프로젝트에 설정된 모든 브레이크포인트 목록을 보여줍니다. 여기서 브레이크포인트를 켜고 끄거나 삭제할 수 있습니다.


4. 디버깅 제어 버튼으로 실행 흐름 조작하기

디버거 탭 상단에는 앱의 실행을 제어하는 다양한 버튼들이 있습니다.

  • Resume Program (F9): 다음 브레이크포인트까지 앱을 계속 실행합니다. 더 이상 브레이크포인트가 없으면 앱은 정상적으로 종료됩니다.

  • Step Over (F8): 현재 줄을 실행하고 다음 줄로 이동합니다. 현재 줄에 함수 호출이 있더라도 해당 함수 내부로 진입하지 않고 한 번에 실행시킵니다.

  • Step Into (F7): 현재 줄을 실행하다가 함수 호출이 있다면, 그 함수 내부로 들어가서 첫 번째 줄부터 디버깅을 계속합니다. 직접 작성한 코드는 물론 라이브러리 코드 안으로도 들어갈 수 있습니다.

  • Step Out (Shift + F8): 현재 함수 내부에서 디버깅 중일 때, 나머지 코드를 모두 실행하고 현재 함수를 호출했던 상위 호출자로 돌아갑니다.

  • Force Step Into (Alt + Shift + F7): Step Into와 비슷하지만, 람다식이나 인라인 함수처럼 컴파일러가 건너뛰는 코드까지 강제로 진입하게 합니다.

  • Drop Frame (아이콘): 현재 스택 프레임을 버리고 이전 호출 지점으로 되돌아갑니다. 이미 실행된 코드를 다시 실행할 때 유용하지만, 앱의 상태가 완벽하게 복원되는 것은 아니므로 주의해야 합니다.

  • Mute Breakpoints (아이콘): 모든 브레이크포인트를 일시적으로 비활성화합니다. 다시 클릭하면 활성화됩니다.

  • View Breakpoints (Ctrl + Shift + F8): Breakpoints 탭을 엽니다.


5. 실전 디버깅 시나리오 예시

  • 변수 값 확인: 특정 변수의 값이 예상과 다를 때, 해당 변수가 할당되거나 사용되는 라인에 브레이크포인트를 설정합니다. 디버깅 모드로 실행 후 멈추면

    Variables 탭에서 변수 값을 확인하고, Step Over (F8)로 한 줄씩 실행하며 값이 어떻게 변하는지 추적할 수 있습니다.

  • 함수 호출 흐름 추적: 어떤 함수가 호출되는지, 어떤 순서로 호출되는지 알고 싶을 때, 해당 함수 호출부에 브레이크포인트를 설정합니다.

    Step Into (F7)를 사용해 함수 내부로 진입하고, Frames 탭에서 호출 스택을 확인하며 흐름을 파악하세요.

  • 예외 발생 원인 찾기: 앱이 갑자기 종료될 때, Logcat에 표시되는 스택 트레이스를 확인합니다. 스택 트레이스에서 본인 코드의 가장 상단 라인으로 이동하여 브레이크포인트를 설정하고, 디버깅 모드로 재실행하여 해당 라인에서 멈춘 후

    Variables 탭에서 관련 변수 값을 확인하며 원인을 찾을 수 있습니다.


6. 디버깅 효율을 높이는 팁!

  • Logcat 적극 활용: Log.d(), Log.e() 등을 이용해 변수 값이나 실행 흐름을 출력하는 것도 매우 효과적인 디버깅 방법입니다.

    Logcat 툴 윈도우에서 필터링 기능을 활용하면 편리합니다.

  • 조건부 브레이크포인트: 브레이크포인트를 우클릭하여 More 또는 Breakpoint Properties를 선택하면, 특정 조건(예: i == 5일 때만 멈춤)이 충족될 때만 브레이크포인트가 작동하도록 설정할 수 있습니다.

  • 임시 브레이크포인트: Shift + F8 (Step Out) 사용 시, 일시적으로 브레이크포인트를 설정하여 현재 함수를 벗어난 지점에서 멈추게 할 수 있습니다.


디버깅은 처음에는 복잡하게 느껴질 수 있지만, 꾸준히 연습하면 앱 개발 과정에서 발생하는 문제들을 효율적으로 해결하는 데 큰 도움이 될 것입니다. 앱 개발, 디버깅과 함께 더욱 즐겁게 해나가세요!

댓글

이 블로그의 인기 게시물

구글 플레이스토어 앱 정보 변경