코딩항해기
[리뷰/우아한테크] 몰리의 디버깅 본문
디버깅 : 자바 애플리케이션에서의 디버깅 도구
디버깅
버그를 제거하는 과정
버그를 찾는 과정 자체를 디버깅한다고 표현하기도 한다.
⇒ 프로그램의 문제가 무엇인지를 찾고 해결하는 과정을 말한다.
디버깅 툴
효과적인 디버깅을 위해 활용할 수 있는 도구들
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에 등록된다.
대안으로 실행하려던 중에 다시 발생한 예외로 해당 주요 예외가 발생한 주요 원인은 아니다.
하지만 대안 제공에 실패해 프로그램 비정상 종료로 이어진 것은 맞다.
'IT tech' 카테고리의 다른 글
[리뷰/코딩알려주는누나] 확장성&재사용성 높은 코드 짜는 법 (0) | 2024.09.29 |
---|---|
[리뷰/우아한테크] 프람의 OAuth-이론 (0) | 2024.09.21 |
[리뷰/우아한테크] 로건의 Transaction (0) | 2024.09.18 |
[리뷰/우아한테크] 제리의 MVC 패턴 (1) | 2024.07.16 |
[리뷰/우아한테크] Stream (Java api) (0) | 2024.07.01 |