[이클립스 팁] 디버그(Debug) 모드 활용하기 - 방법 및 아이콘, 옵션 설명 :: 소림사의 홍반장!

추가로 봐야 함 :  특집기사 - 효율적인 이클립스 디버깅을 위한 팁

 

 

 


디버깅을 시작하기에 앞서..

이클립스에서 디버깅을 하기 위해서 가장 먼저 문제가 될 만한 곳을 찾아라.
->결과(console 창)가 보이는 화면에서 Exception이나 오류가 발생했을 때의 해당 위치,
->논리적으로 뭔가 애매 모호한 프로그램 부근
->업무 시간이 끝날 때 즈음 급하게 나갈려고 대충 짠 부근
등이 주요 타겟이다.

 

 

디버깅모드의 실행

- 벌레 모양 아이콘 클릭으로 시작 

 

 

 

 

 디버깅모드 진행 화면

- 현재 실행이 되고 있는 위치 표시

 

- 변수값 표시

 

- 소스코드에서 현재 실행되고 있는 위치 표시

 

 

 

디버깅모드 아이콘 및 옵션 설명
1.브레이크포인트

의심이 되는 위치에 추가한다.
- 변수명에 설정하면 프로그램에서 이 변수를 사용할 때마다 프로그램이 정지한다.
- 프로그램 라인에 설정하면 해당 프로그램 라인을 지날 때 프로그램이 정지한다.

브레이크 포인트를 여러개 추가한 상태에서 포인트는 그대로 둔채 몇개를 잠시 끄고 싶을 때는 마우스 왼쪽 클릭해서 Disable Breakpoint를 설정하면 된다.(반대는 Enable Breakpoint)


2.Hit Count

브레이크 포인트가 추가되었을때 변수나 프로그램 라인이 몇번 째 호출 되었을때 멈추라는 명령은 Hit Count를 설정함으로서 수행할 수 있다. 이런 경우는 보통 for나 while문에서 몇번의 루프 반복 이후에 문제가 발생할 때 보다 편리하게 이용할 수 있다. '한 100번 쯤 뒤에 문제가 발생하던데' 하면 Hit Count를 95정도로 설정하면 될 테지.

3.멀티 쓰레드 디버깅
위 그림 참조.

멀티 쓰레드 디버깅을 해보신적이 있으신가... 그렇다면 이 문서 자체가 유용하지 않으실 정도로 내공이 쌓인 분이시겠지만... 멀티 쓰레딩을 디버깅하는 아픔을 겪어보신 분이 아니라면, 그런 문제에 부딪히기 전에 이클립스에서 가상 머신(VM)을 아예 멈춰서 전체 쓰레드 동작을 정지시키는 훌륭한 옵션이 있음을 꼭 알고 계시길 바란다.
이 기능은 breakpoint를 설정한 상태에서 컨텍스트 메뉴에서 Suspend VM을 선택하면 된다. Suspend Thread는 원래대로 해당 Thread만 멈추게 된다. 혹 이해가 잘 안되는 사람을 위해 추가로 얘길 한다면 일반적으로 Thread programming을 하지 않고 static void main()을 이용한 기본적인(?) 프로그래밍을 하는 경우는 main이라는 one Thread만 동작하기 때문에 Suspend Thread나 Suspend VM이나 똑같은 작동을 한다.(신경쓰지 않아도 된다는 얘기다.)

4.스텝 단위 디버깅

 


(1) Skip All Breakpoints:모든 브레이크 포인트 건너뛰기

(2) Resume(F8키):멈추어 있던 쓰레드를 다시 진행시키고 다음 브레이크포인트까지 실행
(3) Suspend:쓰레드를 일시 정지한다. 강제로 breakpoint를 현재 수행문에 지정한 것과 같다.

(4) Terminate:종료

(5) Step Into(F5키):프로그램을 한 스텝진행, 다음 실행 문이 함수 안이면 함수 안으로 들어감.
(6) Step Over(F6키):함수 호출을 지나치고 현재 위치에서 한 스텝씩 진행
(7) Step Return(F7키):현재 함수 끝까지 바로 가서 리턴한 후 함수 호출부로 되돌아 간다.
(8) Drop to Frame:선택한 스택 프레임의 첫 행으로 실행 포인트를 옮긴다. 특정 함수를 실행하다 그 함수의 처음부터 다시 디버깅하려고 할때.
(9) Use Step Filters(Shift+F5):스텝 필터링

Run to Line(Ctrl+R):쓰레드가 정지된 상태에서 테스트 하고 싶은 곳을 에디터로 소스에서 선택한 뒤 Run to Line을 실행 하면 그 곳까지 프로그램 수행 후 자동 정지한다.

5. 스텝 필터링
위 그림의 (9) 아이콘.

F5키를 눌러 한 스텝씩 진행하다 보면 java가 제공하는 라이브러리 내부로 들어가는 경우가 발생한다. F6만 누른 다면 문제가 발생하지 않겠지만, 내가 만든 함수 안으로는 들어가보고 싶을 때 신경써서 F5, F6, F7을 누르는 건 상당히 피곤한 일이다. 이럴 때 사용할 수 있는 기능이 스텝 필터링이다. 말 그대로 한 발짝 움직일 때 하지 않았으면 하는 일을 지정해 주는 것이다. 이를 위해서 스텝 필터를 먼저 설정해야 한다.

6.Display

 

디버깅 중, 내가 만든 함수를 이용해 현재의 결과를 보고 싶어 할 수 있다. 예를 들면, isInteger()라는 함수를 만들었고, 이 함수가 함수 인자가 Integer형인자를 리턴 한다고 할때 디버깅 상황에서 현재 상태에 이 함수의 결과를 알고 싶다면, 디버깅을 중단하고 나가서 isInteger()코드를 추가하지 말아라.
단지, Window메뉴의 Show View메뉴의 Display를 켜고 isInteger()를 치고 block을 잡은 상태로 오른쪽 위의 아이콘을 눌러보자.
이 Display는 내가 만든 함수 뿐만 아니라 확인하고 싶은 수식을 직접 입력할 수도 있다.

7.Drop to Frame
4. 그림의 (8) 아이콘

F6키를 사정없이 눌러서 내가 보고 싶어하는 소스 코드 부분을 지나친 적이 있는가. 이럴 때 당신에게 필요한 기능이 Drop to Frame이다. Drop to Frame을 사용하면 현재 메서드의 첫 행으로 되돌아 간다.

8.Detail Formatter
String 객체의 배열을 다루는 class를 사용할 때 너무 많은 String 배열로 인해서 내가 원하는 부분을 찾는 데 어려웠던 적이 있는가? 예를 들면, 한 String 객체의 전체 문자열을 각 array 별로 보여주도록 (ex)S[0] = "나는 언제나")) 하기를 바랬던 적이 있냐 하는 말이다. 이럴 경우 Java메뉴의 Debug메뉴의 Detail Formatters를 통해서 내가 원하는 형태로 객체가 표시되도록 할 수 있다. 복잡한 코드에서는 강력한 기능을 발휘하는 메뉴이다.

 

 

[참고] channel of chaos - http://channelofchaos.blogspot.kr/2007/08/blog-post_30.html


다른 카테고리의 글 목록

Dev. 참고자료 카테고리의 포스트를 톺아봅니다