입문자일수록 개념을 적게, 도구는 많이 사용해야 합니다. 중급으로 나아갈수록 지식의 양이 기하급수적으로 늘어납니다. 이때 스스로 모르는 것을 찾아내기 위해서는 도구가 필요합니다. 정말 유용한 도구인 디버거를 소개합니다.
▶ 초급자와 중급자의 차이 ?
중급자 - 문제가 발생한 원인을 파악하고, 좋은 도구를 사용한다.
초급자 - 문제의 원인을 잘 파악하지 못하면서, 도구를 사용하지 않는다.
디버거
bug : 우리가 짠 코드의 의도하지 않은 문제
debugging : 버그를 잡는 행위
debugger : 디버깅을 할 때 사용하는 도구
그래서 현대적인 개발 도구들은 내부적으로 디버거를 다들 가지고 있다.
코드에 문제가 있거나 코드를 분석하고 싶을 때 디버거를 이용할 수 있다.
STEP 1. 프로그램이 실행되는 것을 일단 멈춘다.
멈추고 싶은 위치에서 더블클릭하면 브레이크 포인터가 생긴다. (다시 더블클릭하면 없어진다.)
![](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
STEP 2. 벌레 아이콘(Debug XXXX) 을 클릭해서 실행한다.
디버거를 통해서 프로그램을 실행한다.
![](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
Perspective 를 디버깅 모드로 전환할 건지 물어보는 창이다. 'Switch'를 클릭하면 Perspective 가 전환된다.
![](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
Perspective 아이콘이 벌레 모양으로 바뀌는 것을 볼 수 있다.
( * Perspective 는 '관점'이란 뜻으로 '자바'를 개발할 때 보기 좋게 구성된 관점과 '디버깅'을 할 때 보기 좋은 화면의 구성으로 바꿔 주는 일종의 '템플릿' 기능과 같다. )
![](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
화살표 표시는 "현재 실행이 여기에서 중지된 상태로 대기하고 있다"는 의미이다.
[Step Over] 를 클릭하면 한 줄만 명령을 실행한다.
![](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
화살표가 한 줄 아래로 내려와 다음 명령에서 멈춰있다.
동시에 [Variable] 탭에서 우리가 실행하고 있는 프로그램의 "id"라고 하는 변수가 "JAVA APT 507"이라는 값으로 세팅되었다는 것을 알 수 있다.
![](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
디버거를 이용하면 프로그램을 한 줄 한줄 실행시킬 수 있고, 실행되는 그 순간에 애플리케이션 내의 변수의 상태를 하나하나 체크할 수 있다.
한 번 더 [Step Over]로 한 줄을 실행시켜보자
myElevator 라는 변수가 생성될테니까 [Variable] 탭에 myElevator 라는 변수가 추가된 것을 확인할 수 있다.
myElevator 변수 내부적으로 id라는 변수에는 "JAVA APT 507"이라는 값이 셋팅되어 있다.
![](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
한줄한줄 코드를 실행하지 않고, 다음 멈추고 싶은 부분에 브레이크 포인트를 설정하고, Run(실행) 버튼을 클릭하면, 다음 브레이크 포인트가 나올 때까지 한 번에 코드를 실행시킨다. 실행되는 과정에서 mySecurity라는 변수가 셋팅되었기 때문에 [Variable] 패널에 변수가 추가된 것을 확인할 수 있다.
![](https://blog.kakaocdn.net/dn/4lTcl/btqy7KQHXAR/dClzWRbYIYZF5qd8UAnddk/img.png)
![](https://blog.kakaocdn.net/dn/bCbdPR/btqy5Dlgpe5/egVSlOoDZYXhHNq3JmrZi1/img.png)
on(),off() 메소드가 실행되면, 콘솔에 문자열이 찍히게 되는데 어떤 원인(동작 과정)으로 찍히는지 궁금하다면 ?
일단 [Step Over] 로 hallLamp.on(); 명령까지 내려 온다. 그 다음에 [Step into] 을 클릭하면, 메소드가 어떻게 되어있는지 확인할 수 있다.
![](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
on()이라는 메소드는 다음과 같은 코드로 이루어져 있고, 이 코드를 실행시킨 결과가 콘솔에 출력되게 된 것이다.
![](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
좌측에는 우리가 실행하고 있는 파일과, 파일의 몇 번째 줄이 현재 실행되고 있는지를 보여주고 있다.
![](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
[Step Return] 으로 해당 함수를 빠져나올 수 있다.
![](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
[Terminate] 로 디버거를 마친다.
![](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
'코딩공부 > JAVA' 카테고리의 다른 글
[11] JAVA 직접 컴파일하기(1) - 실습소개, 실행환경(javac, 환경변수) (0) | 2019.10.18 |
---|---|
[10] 입력과 출력 (0) | 2019.10.18 |
[8] 프로그래밍 이란? (0) | 2019.10.17 |
[7] JAVA 변수 (0) | 2019.10.16 |
[6] JAVA 문자열 다루기 (0) | 2019.10.16 |