LoGin
article thumbnail
반응형



JAVA에서 디버깅 모드를 사용하는 이유는 코드의 동작을 이해하고, 오류를 찾아 수정하는 데 도움이 되기 때문입니다. 디버깅 모드에서 코드의 실행을 단계별로 진행하고, 변수의 값을 실시간으로 확인할 수 있습니다. 
 
개발 툴에서 오류날것 같은 부분을 잘 잡아주길래 저는 디버깅 모드를 잘 사용하지 않았었습니다.
하지만 코드가 길어지고 서비스를 하려고 테스트도 해보다보면 별 이상한 버그와 에러가 많이 나더라고요.
의문의 예외도 코드의 데이터를 볼 수 있다보니까 버그를 잡는데 훨씬 편리했습니다.
 
그래서 문제와 해결하는데 사용했던 디버깅 모드를 공유하겠습니다.
 
 

용어 및 기능

 

Breakpoint 중단점

프로그램을 디버깅 모드로 실행하다가 중단점으로 설정돼 있는 코드 라인을 만나면 실행 가능 불가능 여부를 떠나 중단하고 디버깅 모드에 진입합니다.
 
 

Resume

디버깅 중단점에서 코드의 실행을 계속하는 기능입니다. 디버거가 중단점에 도달하면 실행이 일시 중지되고, Resume을 클릭하면 코드를 실행합니다. 이따 실행 중 다음 중단점을 만나면 해당 위치에서 디버깅 모드가 실행됩니다.
 
 
 

Step Over

현재 라인의 코드를 실행한 후, 다음 라인으로 이동하는 기능입니다. 만약 현재 라인에 함수 호출이 있다면, 해당 함수를 실행하고 결과를 반환한 후 다음 라인으로 이동합니다.
 
 

Step Into

현재 라인의 코드를 실행하되, 함수 호출이 있다면 해당 함수 내부로 들어가는 기능입니다. 이를 통해 함수 내부의 동작을 확인할 수 있습니다.
 
 

Step Out 

Step Out 기능은 현재 함수에서 나와서 호출한 곳으로 돌아가는 기능이에요. 이를 통해 함수의 실행이 끝났을 때 반환값을 확인할 수 있습니다.
 

그 외

Force Step Into 

Force Step Into 기능은 Step Into와 유사하지만, 라이브러리 함수나 getter/setter 등에도 들어갈 수 있는 기능이에요.
 
 
 

Drop Frame

Drop Frame 기능은 현재 프레임을 종료하고, 이전 프레임으로 돌아가는 기능이에요. 이를 통해 특정 함수의 실행을 다시 시작할 수 있습니다.
 
 

Call Stack

Call Stack은 현재 실행 중인 함수들의 목록을 보여주는 기능이에요. 이를 통해 함수 호출의 순서와 상태를 확인할 수 있습니다.

데이터를 예측하고 원하는데로 코드가 돌아가는지 확인할 때, 이 기능이 사실 핵심이죠.
 
 
 
 
 

사용법

package org.example;

public class SubMain {
    public static void main(String[] args) {
        String name = "Loginshin";
        int age = 15;
        SubMain subMain = new SubMain();
        System.out.println(subMain.school(name, age));
    }

    public String school(String name, int age){
        if(age>=20){
            return name+"님은"+"성인";
        }if (age >=14 && age<=16){
            return name+"님은"+"중학생";
        }else {
            return name+"님은"+"초등학생 이하";
        }
    }

}

 
가볍게 설명할 코드를 짠다음에
 
1. 흐름을 보고 싶은, 버그가 일어나는 코드의 전에 중단점을 걸어둔다.

 
 
2. 디버그모드를 해당 메서드를 실행시켜 준다.
실행 방법은 이게 끝입니다.
이제부터는 디버깅모드의 기능들을 사용해서 열심히 버그를 잡으시면 됩니다.

 
 

school이라는 메서드를 사용하기 전 코드에 중단점을 걸었습니다.
step over를 눌러서 다음코드로 넘어갑니다.
 
그럼 다음 코드에 파란 줄이 생기는데 현재 "그 코드 라인을 검사 대상으로 삼고 있다."라는 뜻입니다.

 
step over을 누르면 당연히 코드를 넘어가버리니
step into를 눌러서 메서드 내부로 들어가는 작업을 해보겠습니다.

println이라는 메서드에 들어갈 것인지, school이라는 메서드에 들어갈것인지 선택을 해야 합니다.
 

school메서드를 선택해서 들어오면 가지고 온 데이터 가지고 로직을 통과하는 과정을 거치게 됩니다.
stepover를 누르다 보면 조건문에 잡혀 else문은 회색으로 변하고 school메서드를 탈출하게 됩니다.

 
콘솔도 잘 찍힌 모습니다.
 
 
 
 

나의 사용 경험

 
보통은 어디가 어떻게 에러가 났는지 잘 알려주지만 아주 가끔 프로세스가 터지기만 하고 에러도 잘 알려주지 않을 때가 있습니다.
그래서 디버깅 모드를 사용해서 찾아봅니다.
라이프 사이클동안 원하는 데이터가 변수에 적용되고 있는지 확인하여 주로 해결합니다.
 

1번째 자리가 true로 바뀌어야 하는데 2번째 자리가 바뀌었네요. 이렇게 배열을 초과해서 사용하려 해서 터졌나 봅니다.
적용 배열의 -1 계산 추가해 줘서 오류를 고쳤습니다.
배열은 기초이지만 알고리즘을 작성 하다 보면 실수를 자주 하게 되더라고요...
 

수정 후 다시 실행시켰을 때 성공적으로 돌아가는 모습이었습니다.
 
Java 디버깅 모드는 코드의 동작을 이해하고, 오류를 찾아 수정하는데 매우 유용한 도구입니다.

728x90
반응형
profile

LoGin

@LoGinShin

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!