ㅤㅤㅤ

JAVA 디버깅 튜토리얼 본문

プログラミング/JAVA

JAVA 디버깅 튜토리얼

ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ 2017. 6. 7. 13:55

디버깅 테스트를 위한 소스입니다.

=======================================================

public class TV {

 private int size;
 private String type;
 
 public TV() {
  this.size = 17;
  this.type = "LCD";
 }
 
 public void setSize(int size) {
  this.size = size;
 }
 
 public void setType(String type) {
  this.type = type;
 }
 
 public String getType() {
  return this.type;
 }
 
 public String toString() {
  return "Size : " + this.size + " Type : " + this.type;
 }
}

 

public class TVFactory {

 public static void main(String[] args) {
  TV tv1 = new TV();
  TV tv2 = new TV();
  
  tv1.setSize(22);
  tv2.setType("PDP");
  
  System.out.println(tv1.toString());
  System.out.println(tv2.toString());
 }
}

=======================================================

 

이클립스에서 디버깅을 하기 위해서 우선 다음과 같은 작업이 필요합니다.

1. breakpoint 를 설정한다.

2. 프로그램을 디버그 모드로 실행한다.

 

 

breakpoint 란 프로그램 실행을 멈출 지점을 말합니다.

소스의 어느 곳이나 하나 이상의 breakpoint 를 지정할 수 있습니다.

Editor 의 왼쪽 수직바를 더블클릭 하거나 우클릭 메뉴에서 Toggle Breakpoint 를 선택하여 breakpoint를 설정합니다.

main 메써드에 breakpoint를 설정해 보겠습니다.

 

main 메써드가 있는 라인의 수직바를 더블클릭하거나 우클릭후 Toggle Breakpoint 메뉴를 선택합니다.

 

 

 breakpoint 가 설정된 지점에는 아래와같이 녹색 동그라미가 표시됩니다.

 

 

breakpoint 설정이 되었으면 디버그 모드로 실행을 해보겠습니다.

디버그 모드가 아닌 일반 실행 모드에서는 breakpoint 가 아무런 영향을 미치지 못합니다.

상단 메뉴에서 Run -> Debug As -> Java Application 을 선택합니다. 혹은 벌레모양의 디버그 단축 아이콘을 클릭합니다.

 

 

실행을 하면 Debug perspective 로 화면을 전환할 것인지 물어보는 창이 뜨는데,

매번 묻지 않도록 체크박스에 체크를 하고 Yes를 클릭합니다.

 

 

이제 아래와 같이 Debug perspective 화면으로 전환이되는데 화면 구성을 살펴보면

1. Debug 창에는 실행중인 프로젝트명, 클래스명, 쓰레드, 메써드가 차례로 표시되어 있습니다.

   현재 생성된 쓰레드는 main 쓰레드 하나이며,  그 아래로 메써드명과 라인넘버가 표시된 부분을 stack frame 이라고 하는데

   현재 메써드 내에서 또 다른 메써드를 호출할 경우 바로 윗줄에 호출된 메써드명이 추가될 것이고 호출된 메써드의 실행이

   끝나면 사라질 것입니다.

2. Variables 창에는 현재 변수의 상태가, Breakpoints 창에는 설정된 breakpoint가 표시되어 있습니다.

    레퍼런스 변수의 경우 해당 객체의 멤버 변수 상태를 볼수 있으며 클릭시에는 toString() 메써드의 실행결과가 아래 텍스트

    박스에 출력됩니다.

3. Editor 창에는 breakpoint 로 지정된 main 메써드내의 첫번째 실행문에 화살표가 위치해 있습니다.(line : 6)

   화살표가 위치해 있는 라인은 아직 실행되지 않은 라인입니다.

4. Outline창은 클래스의 구조를 보여주고 있습니다.

 

이제 Debug창의 세부 메뉴를 살펴보겠습니다.

1. Resume 버튼은 다음 breakpoint 까지 (없다면 종료시까지) 프로그램을 실행하라는 뜻입니다. (F8)

2. Terminate 버튼은 현재 실행중인 Debug session 을 종료하겠다는 뜻입니다. (Ctrl+F2)

3. Step Into 버튼은 현재 라인(화살표가 위치한 라인)에서 호출된 메써드나 생성자가 있으면 그쪽으로 이동하겠다는 뜻입니다.

    생성자나 메써드가 없다면 Step Over와 같은 기능을 수행합니다. (F5)

   Step Over 버튼은 현재 라인을 실행하고 화살표를 다음 라인에 위치시키겠다는 뜻입니다. (F6)

   Step Return 버튼은 현재 메써드를 호출한 메써드로 돌아가겠다는 뜻입니다. (F7)

 

Step Over 버튼을 클릭합니다.

6라인이 실행되면서 화살표는 7라인을 가리키고 있습니다.

6라인이 실행되었기 때문에 Variables 창에는 tv1이라는 레퍼런스 변수가 생성되었습니다.

 

Step Over 버튼을 한번더 클릭해서 7라인까지 실행하겠습니다.

화살표는 9라인에 위치해 있고 Variables 창에는 tv2라는 레퍼런스 변수가 생성되었습니다.

 

이제 Setp Into 버튼을 클릭해 보겠습니다.

Editor 창에서 TV클래스의 setSize 메써드로 이동되었음을 확인할 수 있습니다.

Debug 창의 Stack Frame 에 main 메써드에서 호출한 setSize 메써드가 추가되었습니다.

 

이제 Step Return 버튼을 클릭하면 setSize를 호출한 main 메써드로 다시 돌아가게 됩니다.

9번 라인이 실행되었고 화살표는 10번 라인을 가리키고 있습니다.

 

원하는 라인으로 바로 이동할 수도 있습니다.

이동하기 원하는 라인에 커서를 두고 메뉴에서 Run -> Run to Line 을 선택하거나 Edit창에서 우클릭후 Run to Line메뉴를 선택하면 프로그램이 다시 실행되면서 선택된 라인에서 멈추게 됩니다. (Ctrl + R)

 

그리고 Edit 창에서 원하는 변수나 실행결과를 바로 확인할 수 있는 Inspect 메뉴가 있는데요

확인하고 싶은 변수나 문장에 블럭을 지정하여 Inspect 메뉴를 선택하면 조그만 팝업창에 정보가 뜨게 됩니다.(Ctrl + Shift + I)

 

마지막으로 단순 변수값이 아닌 원하는 문장을 실행하여 그 결과를 보고싶을때 사용하는 Expressions 에 대해 알아보겠습니다.

먼저 상단 메뉴에서 Window -> Show View -> Expressions 메뉴를 선택하여 새로운 창을 띄웁니다.

Expressions 창이 생성되면 우클릭후 Add Watch Expression 메뉴를 선택합니다.

 

 

새로운 창이 뜨면 원하는 문장을 입력하고 OK 버튼을 누릅니다.

 

그럼 아래와 같이 원하는 표현의 값을 확인할 수 있습니다.

 

이상 이클립스 디버거 사용법에 대해 간략하게나마 살펴봤습니다.

좀더 자세한 사용법을 원하시면 아래 동영상을 보시기 바랍니다.

영문입니다.

http://sourceforge.net/project/showfiles.php?group_id=200662&package_id=251688

Comments