코딩을 하다 보면 자신이 짠 코드가 제대로 동작하는지, 잘못 되었다면 어느 부분에서 잘못된 것 인지 알아야 하는 경우를 자주 접할 수 있습니다. 이 때, Debugging(디버깅) 기능을 활용하면 오류를 해결하는 데 도움을 받을 수 있습니다. 보통 프로그램에서 문제가 발생하면 '버그(bug)가 있다'라고 말하곤 합니다. 이러한 버그를 잡는 행위를 '디버깅'이라고 합니다.
Debugging이라는 단어는 벌레라는 의미를 가진 단어 'bug' 앞에 부정 접두사 'de'를 붙여서 '벌레를 제거한다'는 의미의 'debug'가 되고, 여기에 동명서 -ing를 붙여 '벌레를 제거하는 것' 즉 '프로그램의 오류(결함)을 고치는 행위'라는 의미를 가진 Debugging 이라는 단어가 되었습니다.
디버깅의 가장 기초는 로그(log)를 확인하는 것입니다. log란, 기록을 남긴다는 의미로 가장 간단하게는 변수를 확인하기 위한 코드를 작성하는 방법이 있습니다. Java에서는 System.out.println(변수)의 방식으로 변수에 담긴 값을 확인할 수 있습니다.
하지만 이런 방식으로 모든 변수를 실시간으로 확인하기는 어렵습니다. 그렇기 때문에 사용하는 것이 Eclipse 자체에 내장된 Debug기능입니다. Eclipse의 Debug 기능을 활용하는 방법을 알아보기 전에 몇 가지 용어에 대해서 설명하고 넘어가겠습니다.
Break Point(중단점) : 프로그램 실행을 잠시 멈출 지점을 표시하는 역할입니다. 프로그램이 실행되다가 Break Point까지 실행이 되면 실행을 잠시 멈추고 해당 코드 전까지 실행되었을 때의 변수를 확인할 수 있습니다.
Step Into(F5) : 중단된 곳 부터 한 줄씩 진행하며 함수를 만난다면 그 함수의 내부로 들어가며 로직을 따라갑니다.
Step Over(F6) : 중단된 곳 부터 한 줄씩 진행하며 함수의 내부로 들어가지 않고 진행 중인 코드의 로직을 끝까지 따라갑니다.
Step Return(F7) : 현재 함수를 끝까지 실행시키고 리턴 후, 함수를 호출 시킨 곳으로 돌아갑니다.
Resume(F8) : 다음 중단점을 만날 때 까지 코드를 다시 실행합니다. 다음 중단점이 없다면 코드를 끝까지 실행합니다.
Terminate(종료) : 디버깅을 중지하고 프로그램 실행을 종료합니다.
자세한 기능 설명은 아래에서 실제로 디버깅을 하는 방법을 알아보며 설명하겠습니다.
오늘 테스트에 사용해 볼 코드는 간단한 A+B를 구현한 코드입니다.
본격적인 디버깅을 시작해보겠습니다. 우선 디버깅 모드로 들어가는 방법을 알아보겠습니다.
디버깅 모드는 상단 네비게이션 바에서 클릭하거나 단축키로 실행할 수 있습니다.
![]() |
|---|
| 상단 네비게이션 바에 벌레모양 아이콘 클릭 or F11 키 |
실행하면 아래와 같은 팝업창이 뜰 때가 있습니다. 디버깅 모드를 실행하면 이클립스 창 구조를 디버깅에 용이하도록 변경하겠다는 팝업인데 Yes(Switch)를 누르는 것을 추천합니다.
변경되고 나면 변수, 중단점, 조사식 등을 확인할 수 있는 윈도우가 자동으로 생성됩니다.
(혹시 No를 눌렀다가 추후 변경하고 싶으시면 Window - Preference - Run/Debug - Perspectives 에서 오른쪽 Debug를 None에서 Debug로 변경하시면 됩니다.)
디버깅이 실행되었다면 아래와 같은 구조로 창이 바뀌었을 것입니다. (윈도우 위치와 순서는 차이가 있을 수 도 있습니다.
각각의 부분에 대해서 간단하게 설명하겠습니다.
1. 위에서 설명한 디버깅을 진행하는 키들입니다. 순서대로 Resume - Suspend - Terminate - Disconnect - Step Into - Step Over - Step Return 입니다.
2. 변수, 중단점을 확인할 수 있는 공간입니다.
Variable : 현재 함수에서 사용중인 변수를 보여 줍니다.
BreakPoints : 중단점에 관한 정보를 확인할 수 있습니다.
Expressions : 코드 내에서 사용 중인 변수에 대한 정보를 확인할 수 있습니다. 수식, 변수 등 활용할 수 있습니다.
3. 코드를 실행하며 Input/Output을 확인하는 Console 창입니다.
이제 코드를 실행하며 변수를 확인하는 방법을 알아보겠습니다.
Break Point(중단점)은 설정한 포인트까지 코드를 실행 한 뒤, 일시 중단하고 그 상태에서의 값을 확인하기 위해 필요한 기능입니다. 중단점부터 한 줄 씩 실행하며 값이 변하는 것을 확인할 수 있기 때문에 필수로 설정되어야 합니다. 확인하고 싶은 변수가 있는 곳이나 그 이전에 중단점을 적용해야 값이 변경되는 것을 확인할 수 있습니다.
빨간 부분을 보면 파란색 동그라미가 생긴 것이 보입니다. 이 파란 점이 중단점 입니다.
오른쪽에 노란 부분을 보면 전체 스크롤 중에 중단점이 설정된 위치를 바로 보여줍니다. 클릭해서 해당 줄로 바로 이동도 가능합니다.
추가로 6번줄의 화살표가 붙은 중단점은 Method BreakPoint로 함수의 시작점을 표현하는 것입니다.
보통은 일반적인 코드에 중단점을 설정하는 Line BreakPoint를 많이 사용합니다.
(Method BreakPoint는 Debugging 성능을 저하시킨다고 합니다.)
1. 코드 에디터 부분에서 라인 넘버 왼쪽에 파란 부분 더블 클릭하기
코드 에디터의 라인 번호 좌측에 파란색 영역을 더블 클릭하면 중단점을 생성할 수 있습니다.
2. Ctrl + Shift + B 단축키 활용하기
설정하고 싶은 라인에 커서를 두고 단축키를 통해 중단점을 생성할 수 있습니다.
cf) 특정 조건에서만 중단점 적용하기
코드를 실행하다보면 모든 조건이 아닌 특정 조건에서만 값을 확인해보고 싶은 상황이 생깁니다. (특히 반복문) 이럴 때, 중단점에 Condition(조건)을 걸어서 해당 조건이 되었을때만 중단점에서 일시정지하도록 할 수 있습니다.
중단점을 설정한 뒤, 우측 window 중 Breakpoints 윈도우를 클릭하면 위쪽에 설정된 모든 중단점이 보입니다.
조건을 주고싶은 중단점을 선택 - 아래에 Conditional에 체크 - 원하는 조건 (EX. a==b) 를 입력
이렇게 중단점에 조건을 줄 수 있습니다. 조건을 갖게된 중단점은 파란 점 왼쪽 위에 물음표가 생성됩니다.
이렇게 조건을 준 뒤 해당 코드를 디버깅하면 a와 b의 값이 같을 때만 해당 중단점에서 멈추게 됩니다.
위에서 간단하게 설명한 디버깅 기능들에 대해 알아보겠습니다.
기본적으로 Step Into / Step Over를 가장 많이 사용하지만 두 기능에 약간 차이가 있기 때문에 상황에 맞는 기능을 사용하시면 됩니다.
1. Step Into (F5)
모든 코드를 한줄 씩 실행해가는 기능입니다. Step Into라는 말 그대로 함수가 있다면 함수 안으로 들어가며 실행합니다. 모든 함수를 실행하다보니 직접 구현한 함수가 아닌 내장함수까지 모두 실행하게 됩니다. (EX br.readLine() 줄에서 Step Into를 하면 BufferedReader.class 파일로 이동하게 됩니다.) 기본적으로 Step Over를 사용하시되, 직접 구현한 함수 내부로 들어가고 싶을 때 Step Into를 사용하시면 됩니다.
2. Step Over (F6)
가장 많이 사용하게 될 기능입니다. Step Into와 비슷하게 동작하지만, 함수를 만나도 함수 안으로 들어가지 않고 함수의 return값만 받아와서 바로 다음 줄로 넘어가게 됩니다. 기본적으로 한 줄 씩 디버깅 할 때 사용하시면 됩니다.
3. Step Return (F7)
함수 내부로 들어갔을 때, 그 함수를 끝까지 실행하고 return하는 기능입니다. 구현한 함수에서 더 이상 확인할 부분이 없어서 함수 밖으로 나갈 때나, 내장 함수에 잘못 들어갔을 때 다시 밖으로 나올 때 사용하시면 됩니다.
4. Resume (F8)
단어 그대로 코드를 재개하는 기능입니다. 다음 중단점을 만나기 전까지 중지하지 않고 코드를 실행하는 기능입니다. 중단점이 없으면 코드를 끝까지 실행합니다. 다음 중단점으로 이동할 때 사용하시면 됩니다.
5. Terminate (Ctrl + F2)
문제를 찾거나 코드 수정이 필요할 때 디버깅을 종료하기 위한 기능입니다.
디버깅을 하는 방법을 배워봤으니 이제 디버깅을 통해 변수가 변하는 것을 확인하는 방법을 알아보겠습니다. 위에서 설명한 Variables / Expressions 윈도우에서 확인할 수 있습니다.
Variables 확인하기
a, b가 할당 된 이후 인 13번줄에 중단점을 적용하고 디버깅을 실행했습니다.
콘솔창을 보면 2 3을 입력해서 a, b에 2랑 3을 할당했습니다.
이 때 오른쪽 Variables 윈도우를 보면 a에는 2가, b에는 3이 할당 된 것을 확인할 수 있습니다.
지금은 간단한 예제를 통해 확인했기 때문에 너무 당연한 결과를 보여주고 있지만, 코드가 복잡해지고 변수의 값이 계속해서 바뀌는 코드에서는 해당 기능을 통해 바뀌어가는 변수를 확인하며 문제가 있는 곳을 확인할 수 있습니다.
Expressions 활용하기
위의 사진과 동일한 시점에서 Expression 윈도우로 간 사진입니다.
처음에는 Expression이 없을 겁니다. 빨간 네모 부분 "+ Add new Expression"을 클릭해서 새 수식을 등록할 수 있습니다. 여기에는 코드에 사용된 변수의 값만 확인할 뿐 아니라 변수들을 사용해서 연산을 해볼 수도 있습니다. Visual Studio의 조사식과 같은 기능입니다. 예시로는 간단한 수식만 확인해봤지만, a==b, a>3 과 같은 논리식도 적용가능합니다. 조건문을 제어할 때 조건의 값이 언제 바뀌는지 확인할 때도 유용하게 사용할 수 있습니다.
이렇게 이클립스의 기본적인 세팅과 사용법에 대해서 알아봤습니다.
다음 포스팅은 이클립스 단축키에 관한 포스팅을 마지막으로 Java를 학습하기 전 세팅과 관련된 포스팅은 마무리하도록 하겠습니다.