-
[JAVA] 이클립스 디버깅 하는 법 알아보기프로그래밍 언어/JAVA 2022. 7. 29. 12:19
디버깅이란?
디버깅이란 대부분의 경우 코드에서 버그를 제거하는 것을 의미한다. 오타를 찾는 코드를 검사하거나 코드 분석기를 사용하여 디버그할 수 있다. 그럼) 이클립스에서 디버깅하는 방법에 대해 알아보자.
1. BreakPoint 지정하기
디버깅을 진행하려면 가장 먼저 해야하는 일이 브레이크 포인트를 지정해주는 일이다. 오류가 의심가는 라인 넘버가 적혀있는 좌측을 더블클릭 하거나 마우스 우클릭으로 Toggle BreakPoint를 클릭해서 지정할 수 있다.
2. 디버그 실행하기
상단바에 RUN 버튼 좌측 벌레 모양 아이콘을 클릭하거나 Run - > Debug ( F11)을 누르면 디버그 모드가 실행된다.
아이콘을 누르면 화면을 전환하겠냐는 메시지창이 뜨는데 Switch 버튼을 클릭하면 된다.
디버그 모드로 실행되었다면 맨 우측 Perspective 창을 살펴보면, 벌레 모양이 선택된 걸 확인할 수 있다. 다시 원래 코딩 창으로 돌아가고 싶다면 벌레모양에서 좌측으로 2칸인 JAVA EE를 클릭하면 된다.
자! 이제 그럼 디버깅에 대해 본격적으로 알아보자.
3. 검사 진행하기
7번째 라인에 Break Point를 찍고 디버깅을 실행했기에, 6번째라인까지 검사된 후 7번째 라인 시작 전에서 Break 멈추게 된다. 우측 Variables(변수) 창을 살펴보면 선언된 변수의 name과 값을 확인할 수 있다.
라인을 하나씩 넘어가면서 검사할 수도 있고 BreakPoint를 여러개 지정했다면 다음 포인트로 넘어갈 수도 있고 검사방법은 다양한데 단축키나 아이콘을 클릭해서 진행하면 된다.
(좌측부터 1번이라고 가정하겠다.)
1. Resume(F8) 다음 브레이크포인트까지 진행한다. 2. Suspend 디버깅을 일시 중단한다. 3. Terminate ( Ctrl + F2 ) 디버깅을 종료한다 4. Disconnect 디버깅을 끊어버린다. 5. Step Into ( F5) 한 단계씩 진행한다.
내부 클래스, 라이브러리, 함수 등 전부 거쳐가며 한단계씩 진행한다.
즉) Method를 포함한 라인을 만나면 Method 안으로 진입6. Step Over (F6) 다음 라인으로 이동한다.
즉) Mehod가 있어도 Method 안으로 진입하지 않고 다음 라인으로 이동7. Step Return (F7) 현재 징행중인 메서드를 바로 Return해버린다. < 디버깅 예제 코드 >
package ch5; public class Ex5_3 { public static void main(String[] args) { int[] score = {79, 88, 91, 33, 100, 55, 95}; int max = score[0]; int min = score[0]; for(int i=1; i<score.length; i++) { //배열의 2번째 요소부터 읽기 위해서 i의 값을 1로 초기화 if(score[i]>max) { max=score[i]; }else if(score[i]<min) { min=score[i]; } } System.out.println("최대값: "+max); System.out.println("최솟값: "+min); } }
6번째 줄에서 브레이크 포인트를 지정하고 디버깅을 실행한 뒤 단축키 F6, Step Over를 눌러 10번째 줄 전까지 한 단계씩 디버깅을 실행하였다. 한 단계씩 실행했을 때 10번째 줄 for문을 만나기 전 max와 min에는 모두 score[0] (79) 라는 값이 들어가 있는 걸 확인할 수 있다.
그 후 for문으로 들어가서 디버깅을 한 줄씩 실행하면 반복되는 i값이 2일 때 max는 91 min은 79이라는 걸 확인이 가능하다. 이런식으로 한 줄씩 검사를 진행하면서 생각했던 값과 다른 값이 들어온다면 오류가 났다고 판단하고 수정하면 된다.
반응형'프로그래밍 언어 > JAVA' 카테고리의 다른 글
[ch 11 컬렉션 프레임웍] List, Set, Map 핵심 인터페이스 살펴보기 (0) 2022.08.02 [ch9] String 클래스의 유용한 생성자와 메서드 (0) 2022.08.02 [ch7 자바 객체] 내부 클래스(inner class)와 익명 클래스(anonymous class) (0) 2022.06.22 [ch7 자바 객체] 추상(abstract) 클래스와 인터페이스(interface) (0) 2022.06.22 [ch7 자바 객체] 캡슐화(getter & setter)와 다형성(polymorphism) (0) 2022.06.19