우테코

[우테코 8기 프리코스] 디버깅 이해하기

bang-dev 2025. 10. 24. 16:13

디버깅

프로그램은 멈추지 않고 지나가는데 디버그 모드는 break point를 잡으면 프로그램을 멈추고 상태를 잡아 어디가 문제인지 확인할 수 있다.

breaking point : 해당 line의 코드가 실행되기 직전의 상태에서 멈춘다.

strack trace: 어떻게 된건지 스택이 쌓여있음.

Variables → 지역 스코프에 존재하는 변수들이 나옴.

Resume → 브레이크 포인트 내에서 다음 브레이크 직전까지 쭉 실행

Step Over → 브레이크 포인트에 국한되지 않고 다음라인 직전까지 실행

Step Into → 그 실행 줄에서 실행되는 메서드들 안으로 한단계 들어가는 것

Factory factory = new Factory()

//에서 new Factory로 들어가서 

public class Factory{
	public User User(){
		retrun new User(connectionMaker());
	}
}

//위는 기본 생성자가 숨겨져 있기 때문에 기본생성자 실행 됨.
//이때는 Step Over을 눌러도 실행될 메서드가 없기 때문에 원래 breakpoint로 돌아온다

//돌아오면 다시 
Factory factory = new Factory()
//가 실행되는데 이때는 이미 new가 실행됐기 때문에 Step Into를 눌러도 다음줄이 실행된다.

Step Out → Step Into의 정 반대 개념 스택에서 나오는데, 실행을 시킨 후 나온다. 즉, 실행 시키고 다음으로 넘어감.

Drop Frame → Step Out이랑 기능상 동일하지만 실행되지 않고 나온다는 차이가 있다.

Run to Cursor → breakpoint를 설정하지 않아도 커서가 있는 곳에서 resume 된다.

break point 우클릭 condition → 원하는 값을 설정가능. 반복문 일 때 원하는 조건만 사용할 수 있기 때문에 유용하다.

Evaluate → 실행가능한 모든걸 실행해 볼 수 있다. 하지만 실제로 실행되니 조회만 사용할 것!! 제어의 역전 상황일 때 사용하면 좋다.

Watch → 현재 스코프 내에서 내가 브레이크 포인트 걸릴 때 마다 evaluate 해보고 싶은걸 미리 지정해놓을 수 있음. Variables에서 확인 가능!

StackTrace

  • 실행 경로를 나타내는 메서드 호출 목록
  • 예외 발생시 출력된 StrackTrace를 통해 발생된 예외를 디버깅 가능
  • 아래에서 부터 이유라고 생각하면 편할 것 같음.

해당 예외까지 오게된 실행경로(메서드가 선언된 클래스, 메서드 이름, 메서드가 있는 파일 명, 메서드 라인 넘버) 를 표시한다!

Caused by: CarException 과 같이 Caused by가 붙으면 에외 이유를 나타낸다고 생각하면 될 것 같다.

Throwable.printStackTrace()에서 Suppressed Exception:

  • 해당 쓰레드에서 Catch된 예외
  • 원래는 Stact Trace에 출력되지 않음
  • try-with-resourse 시 발생하는 에러는 자동 Suppressed 등록
  • Thread.addSuppressed() 를 통해 비록 사라졌지만 등록가능
  • 메인 예외를 던질 때, 함께 발생한 보조 예외가 사라지지 않도록 예외 객체에 첨부된 것

 

 

참고.

https://www.youtube.com/watch?v=gkutTlwi70s

http://youtube.com/watch?v=JSVvhwwOvAY&feature=youtu.be

https://www.youtube.com/watch?v=leIwlemLWNc&feature=youtu.be