티스토리 뷰

-공부 내용 필기, 기록임-

 

디버거를 앱과 함께 실행하는 방법에는 두가지가 있다

1. 디버거를 기기나 에뮬레이터에서 실행되는 기존 앱 프로세스에 연결(앱을 avd나 기기에서 실행한 다음 디버깅 하는것을 의미하는듯? 아닝 이거 영어로 보고싶어도 언어가 안바뀜 ㅡㅡ)

2. 디버거로 앱을 실행

 

앱 프로세스에 디버거 연결

앱을 avd, 실기기에서 실행하고 디버거를 실행중인 앱에 연결

1. 앱 실행하셈

2. Attach Debugger to Android Process 클릭함

헷갈려서 화살표 없는 벌레 누르지 말고 화살표 있는 벌레 누르셈

3. 프로세스 선택

디버거 연결할 프로세스를 선택한다

디버거 연결된 모습

디버거로 앱 실행

디버거를 처음부터 사용할 경우에 디버거로 앱 실행하는게 시간 절약이 되고

앱이 실행될때만 실행되는 코드를 디버그 하려면 디버거로 앱 실행해야 함

앱이 실행되지 않은 상태에서 위 사진의 그냥 벌레를 누르면 디버거가 앱을 실행함


Debug 창

1. console

앱의 logcat출력을 표시함

 

2. Debugger

Debugger버튼은 창 3개를 띄워준다

  • Frames
  • Variables
  • Overhead

일반적인 디버거 기능 사용

1. 중단점 설정

디버거의 주요 기능중 하나는 중단점을 사용해 특정 코드줄에서 실행을 중지할 수 있다는 것

위 이미지 처럼 중단할 코드부분의 왼쪽 코드줄 숫자 옆을 누르면 설정된다

 

2. Resume Program

디버거로 코드 실행이 정지된 경우 앱을 이어서 실행하려면 Resume Program을 사용한다

66번 라인에 중단점을 만들고 앱을 실행하면 위 그림처럼 파란색 표시가 되면서 저 부분에서 실행이 멈췄음을 알수있다

그리고 하단에 위 그림같은 창들이 나타난다

-Frames: 중단점이 설정된 줄 참조가 강조표시된 상태로 포함되어 있다, 많은 정보가 표시된다

-Variables: 여러 항목이 표시됨, 변수들이 보인다, 변수 검사기능은 디버거의 필수 기능이다 

위 이미지에서 표시한 버튼이 Resume Program이다 얘를 누르면 중단점에 멈췄던 앱이 이어서 실행된다

 

3. Step Into 버튼

런타임시 간단하게 코드를 자세히 살펴볼 수 있게하는 버튼

명령이 메서드 혹은 다른 코드를 호출하는 경우에 Step Into 버튼을 사용하면 디버거를 실행하여 중단점을 설정하기 전에 

수동으로 탐색할 필요없이 코드를 입력할 수 있음

그니깐 이게 뭔소리냐면 님이 중단점을 무슨 함수 호출하는부분에 함 그러면 거기서 멈추잖음?

근데 호출하는 부분에서 그 함수 안으로 들어가서 뭔가 확인하고싶으면 따로 또 중단점을 그 함수부분에 설정하고 이러면

번거로우니깐(? 맞나) Step Into를 누르면 알아서 그 함수 부분을 찾아서 들어가서 중단점 새로 잡아주는거임

(이거 소프트웨어 공학인가 소프트웨어 설곈가 수업에서 들어본것 같은데)

DiceRollerApp()함수 호출되는 부분에 중단점을 만들고 벌레버튼(Debug app)을 눌러 앱을 다시 실행한다

아까 중단점 만든 DiceRollerApp()호출되는 부분에서 앱 실행이 멈췄다

이 상태에서 위 이미지에 표시한 버튼 Step Into를 누른다

56번 줄이 강조된다 그리고 Frames창에 56번 코드에서 정지되었다고 표시된다

자세히 보면 invoke:48 이라고 적혀있다

이를 호출 스택 이라고 한다

현재 줄로 이끄는 호출 체인을 보여준다

48번 줄은 위 이미지에서 보았듯 DiceRollerApp()함수를 호출하는 줄이었다

이것을 보면 이 함수가 어디서 호출된건지 알수있다

66번줄에 중단점을 설정하고 Frames를 보자

Frames 창에 파란색 표시된 부분이 어디에 지금 멈췄는지 알려주는 부분인데 66번줄에 멈췄다고 적혀있다

그 밑에 보면 57번줄에서 66번 줄을 호출(유발?)했다는것을 알수있고

또 그 밑을 보면 48번줄이 57번줄을 호출했다는것을 알수있음

실제로 코드를 확인해보면 이럼

 

4. Step Over 버튼

이 버튼을 사용하면 런타임에 앱 코드를 단계별로 실행할 수 있다

이 버튼을 통해 다음줄로 실행을 이동하고 디버거를 진행함

위 이미지를 보면 56번 라인에서 실행이 멈춰있다

위 이미지에서 표시한 버튼을 누른다

56라인 다음에 실행되어야 하는 57라인으로 옮겨졌다

이 버튼을 누르면서 실행되는 순서대로 한줄한줄 실행 하는것임

 

5. Step Out 버튼

얘는 step into랑 반대로 호출 스택을 드릴다운(호출당한 함수로 들어가 깊게 파고드는? 것을 뜻하는듯) 하는대신 호출 스택으로 이동한다

57번줄 에서 멈춘상태, 위 이미지에 표시한 버튼이 Step out인데 눌러본다

DiceRollerApp()을 호출한 48번 줄로 이동

 

6. 변수 검사

Variables창에서 변수 검사를 해보자

66번줄에 중단점을 만들고 디버깅 실행

result$delegate라는 변수가 값이 1인 MutableState임을 확인할수있다

코드를 보면 이렇게 result$delegate가 1이고 result라는 변수에 들어간다고 표시가 되어있다

정의된 변수는 값이 1인 mutableStateOf로 인스턴스화(?이게뭔데) 되어있기때문에 MutableState이다

MutableState는 결과변수가 변경될 수 있는 상태를 보유하고있음을 의미한다

result는 remember위임(?) 이므로 $delegate 표기법을 사용한다(몬소리임)

암튼 이런식으로 변수값을 확인하는게 가능함

어떤 앱은 변수값 때문에 비정상 종료될수가 있음

디버거를 통해 변수 검사를하면 얘가 비정상 종료되는 이유를 알아내기 좋다

 

 

-참고 사이트(코드도 여기 다 있음)

https://developer.android.com/courses/pathways/android-basics-compose-unit-2-pathway-2?hl=ko&authuser=1#codelab-https://developer.android.com/codelabs/basic-android-kotlin-compose-intro-debugger 

 

앱에 버튼 추가  |  Android Basics Compose - Add a button to an app  |  Android Developers

Android 앱에서 버튼 클릭에 응답하는 방법을 알아봅니다.

developer.android.com

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/10   »
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 31
글 보관함