코딩항해기

[리뷰/우아한테크] 몰리의 디버깅 본문

IT tech

[리뷰/우아한테크] 몰리의 디버깅

miniBcake 2024. 9. 21. 13:17

 

 

 

 

 

 

디버깅 : 자바 애플리케이션에서의 디버깅 도구

디버깅

버그를 제거하는 과정

버그를 찾는 과정 자체를 디버깅한다고 표현하기도 한다.

⇒ 프로그램의 문제가 무엇인지를 찾고 해결하는 과정을 말한다.

디버깅 툴

효과적인 디버깅을 위해 활용할 수 있는 도구들

IDE Debugger

StrackTrace

(Log, Profiler, Test code 등)

디버깅 툴이 중요한 이유

툴을 효과적으로 사용해 빠르게 문제를 찾을 수 있고 해결할 수 있다.

 

 

IDE Debugger

(인텔리제이 기준)

보통 중단점을 찍고 단계 별로 진행시켜 프로그램의 흐름을 확인하는데 사용된다.

 

프레임 : 실행된 메서드의 실행 당시의 로컬 변수, 파라미터 값등이 저장된다.

(주의사항) 메서드 실행이 완료되면 해당 프레임이 스택에서 제거된다.

 

Variable Tab : 선택한 프레임의 변수 목록이 표시된다.

 

Stepping : Stepping으로 프로그램의 단계 별 실행을 제거 가능하다.

Step Into : 현재 라인에서 메서드가 있다면 호출한 메서드 내부로 이동하는 기능이다.

Step Out : 현재 메서드를 벗어나 호출시킨 메서드 다음으로 이동한다.

Step Over : 현재 라인에 메서드가 있어도 바로 다음 라인으로 이동한다.

 

Reset Frame : 가장 최근 실행된 프레임을 되돌리는 기능이다.

(주의사항) 프레임 내의 로컬 변수만 되돌릴 수 있고 전체 프로그램이 해당 메서드 실행 전의 상태로 돌아가는 것이 아니다. 만약 메서드가 전역변수의 값을 바꾸는 기능을 했다면 예상하지 못한 결과가 나올 수 있어 주의해야한다.

 

 

StackTrace

예외가 발생하면 StackTrace가 출력되고, 이 말은 개발자가 처리하지 못한 예외가 있다는 말이다.

(= try catch 가 없는 예외에 프로그램이 도달했다.)

 

JVM이 감지하여 핸들러에게 예외를 전달한다.

 

핸들러는 전달받은 예외의 쓰레드 이름을 출력하고 발생된 예외의 printStackTrace를 실행한다.

즉, 실행경로를 나타내는 메서드의 호출목록으로 예외 발생 시 출력된 StackTrace를 통해 발생된 예외를 디버깅 가능하다.

먼저 첫 줄에서 어떤 쓰레드에서 예외가 발생했는지 확인할 수 있다.

 

 

 

그리고 그 바로 옆에서 어떤 종류의 예외가 발생했는지 확인할 수 있다.

(예외 클래스명과 예외 메세지가 같이 출력된다.)

그 다음 부분에서는 해당 예외까지 오게되었는지 그 실행 경로를 알려준다.

이전에 호출되었던 메서드들의 선언된 클래스, 이름, 파일명, 라인넘버를 알려준다.

 

 

하지만 아직까지는 어떤 이유로 문제가 발생했는지 알기 어렵다.

그래서 어떤 문제로 발생했는지 이유를 바로 아래 Caused by로 알려주고 있다.

 

이 Caused by는 어떤 예외의 원인이 되는 예외로 Throwable.initCause()또는 생성자를 통해 등록된다.

그리고 그 밑의 Caused by는 상단의 Caused by 예외의 발생 원인이다.

 

Suppressed는 해당 쓰레드에서 catch된 예외(처리된 예외)로 원래는 출력되지 않지만 try-with-resource시 발생하는 에러는 자동 Suppressed에 등록된다.

 

대안으로 실행하려던 중에 다시 발생한 예외로 해당 주요 예외가 발생한 주요 원인은 아니다.

하지만 대안 제공에 실패해 프로그램 비정상 종료로 이어진 것은 맞다.