고의로 에러를 발생 시켜보겠습니다.

스크린샷 2024-10-22 오후 1.00.24.png

<aside> 💡

디버깅을 해본적이 없는 저는 illegalArgumentException 에 메시지를 부여하는 방법으로 어떤 오류가 났는지 check했습니다. 위의 메뉴에서 어디 부분에서 앱이 종료된지 확인할 수 있다는 것을 깨달았습니다.

</aside>

스크린샷 2024-10-22 오후 1.10.31.png

스크린샷 2024-10-22 오후 1.10.52.png

스크린샷 2024-10-22 오후 1.11.31.png

이런식으로 checkPoint를 설정해두고 어느 부분에서 오류가 나는지 점검했습니다. 위와 같은 상황은 checkPoint2와 checkPoint3 사이에서 오류가 나는 것을 확인할 수 있었습니다. 이를 계속 세분화하고 출력값등을 점검하면서 디버깅을 했습니다.

이 과정에서 다른 디버깅 방법들과 어떻게 에러를 잡아나가야 하는지에 대한 추가 공부가 필요해 보였습니다.


📌 디버깅(Debugging)

<aside> 💡

디버거를 이용하면 더 유용하게 디버깅을 할 수 있다.

BreakPoint를 설정하고 어플리케이션을 끊어서 실행하며 어떻게 실행되고 있는지 체크할 수 있다

스크린샷 2024-10-22 오후 1.36.04.png

스크린샷 2024-10-22 오후 1.38.18.png

Print 시키는 것 보다 더 편하게 이용할 수 있다.

마우스 우클릭시 조건에 따라서 Debug 할 수도 있다.

스크린샷 2024-10-22 오후 1.40.42.png

</aside>

<aside> 💡

디버거의 기능 설명

직관적인 기능들에 비해서 화살표로 된 기능들에 대해서 추가적으로 dig-in 해보았다.

스크린샷 2024-10-22 오후 1.42.13.png

예제 코드

아래는 단순한 자바 프로그램으로, 디버깅 예시에 사용할 코드입니다.

java
코드 복사
public class DebugExample {
    public static void main(String[] args) {
        int a = 5;
        int b = 10;
        int sum = add(a, b);    // Line 6
        System.out.println("Sum: " + sum);    // Line 7
    }

    public static int add(int x, int y) {
        int result = x + y;    // Line 11
        return result;         // Line 12
    }
}

1. Step Over

Step Over는 현재 코드 줄에서 함수 호출을 건너뛰고 그다음 줄로 이동합니다. 함수 내부로 들어가지 않고, 함수 호출이 끝날 때까지 실행됩니다.

상황 예시:

  1. 디버거가 Line 6 (int sum = add(a, b);)에서 중단된 상태입니다.
  2. 여기서 Step Over를 사용하면 함수 add(a, b)가 호출되지만, 디버거는 함수 내부로 들어가지 않고 Line 7으로 바로 이동합니다.
  3. 즉, 함수 내부 코드 (Line 11, 12)를 한 줄씩 디버깅하지 않고, 함수 호출 후의 결과만 확인합니다.

Step Over 동작 순서:

2. Step Into

Step Into는 함수 호출 시 그 함수 내부로 들어가서, 함수의 실행 흐름을 한 줄씩 디버깅합니다.

상황 예시:

  1. 디버거가 Line 6 (int sum = add(a, b);)에서 중단된 상태입니다.
  2. Step Into를 사용하면, 함수 add(a, b)가 호출될 때 Line 11로 이동하여, 함수 내부에서의 실행을 한 줄씩 디버깅할 수 있습니다.
  3. 그 후 Line 12에서 값을 반환하고, 다시 Line 7으로 돌아옵니다.

Step Into 동작 순서:

3. Step Out

Step Out은 현재 실행 중인 함수에서 나와서 함수 호출이 끝난 후의 코드로 돌아갑니다.

상황 예시:

  1. 디버거가 이미 함수 add(a, b) 내부(Line 11)에 중단된 상태입니다.
  2. Step Out을 사용하면 함수의 나머지 코드를 모두 실행하고, 함수 호출이 끝난 후 다시 Line 7로 돌아옵니다.
  3. 즉, 함수 내부의 남은 실행을 스킵하고 호출부로 나오는 방식입니다.

Step Out 동작 순서: