이 글을 통해 기본적인 인텔리제이의 디버깅 기능들을 알아볼 수 있었습니다.
이제까지의 내용으로 아마 어느정도는 자주 보았던 또는 예상했던 기능들을 사용하는 데에는 무리가 없습니다.
하지만 흥미로운 기능들이 있어, 소개하고자 글을 작성하게 되었습니다. (맛있는 거 많다 ~)
이 글은 인텔리제이 기본 디버깅 기능들을 알고 계시다면 이전 편을 보지 않았어도 이해하기 충분하지만, 이전 편을 보았다고 가정하고 글을 작성하겠습니다.
프로그램에 끼어들어버리기
다음 기능들은 말 그대로 실행 중인 프로그램에 흐름에 내가 끼어들어 영향을 주는 것들인데요.
코드 상의 변경을 하지 않고도 메서드 실행 결과 등등을 변경해버리는 기능입니다.
다시 Reset Frame
사실 이전 글의 Reset Frame 부분을 보면서 궁금하셨을 지점이 있을 것 같습니다.
Reset Frame을 통해 되돌아간 후 다시 단계를 거치면 전역, 인스턴스 변수는 어떻게 되는 거지?
다시 말하지만, 리셋되지 않기 때문에 매우 큰 영향을 받습니다.
이전의 코드를 조금 변경하여 Reset Frame을 적용해보도록 해봅시다.
일단 step into로 change 메서드의 실행 완료 직전으로 갑니다. num의 값이 변경되었네요.
이 상태에서 Reset Frame을 실행해도 num은 그대로입니다.
이 상태에서 다시 Step Over을 하게 되면???
오마이갓 num이 한번 더 바뀌면서 num이 2가 되어버리네요.
디버깅이 아니라 정상적으로 실행했다면 1이 나왔을 프로그램이 디버깅 과정에서 제가 끼어든(?) 것 때문에 이상한 결과를 내었습니다.
여기서도 역시 교훈은 정적, 인스턴스 변수가 있는 상황에서 Reset Frame 사용을 주의하라가 되겠네요 ㅎ
강제 반환해버리기
이 기능은 메서드에 적용할 수 있는 기능인데요.
프레임 스택에서 적용할 하나의 프레임을 선택한 후, 우클릭하면 사용할 수 있습니다.
사용하기 위해 또 예제를 봐봅시다.
메서드의 리턴타입을 num에 적용하는 코드가 있습니다. change메서드가 실행된 후 num이 10이라면 프로그램을 즉시 종료하도록 되어있습니다.
Step Into를 통해 change 메서드 내부로 들어갔기 때문에 해당 프레임이 생겼네요.
num도 1로 변경된 것을 보니 메서드가 잘 동작했습니다.
그런데 갑자기 main의 if 문이 실행될 때의 동작을 보고 싶습니다.
이럴 때 우리는 반환 버튼을 눌러 change의 반환값을 변경 시킬 수 있습니다.
최종적으로 해당 프로그램은 if문이 동작하여 종료하게 됩니다.
강제 예외던지기
다음은 반환과 비슷하게, 예외를 던지는 기능입니다.
사용방법은 강제 반환하기와 거의 동일합니다. 프레임을 누르고 던질 예외를 작성해주면 터지게 됩니다.
자바 스트림 분석하기: Stream Trace
자바로 개발을 하다보면 클린코드를 위해 스트림을 많이 사용하고는 하는데요.
아시는 것처럼, 자바 스트림은 내부 반복으로 실행됩니다. 반복문을 메서드 내부에 숨기기 때문에 디버깅하기 쉽지 않습니다.
우리의 든든한 친구 인텔리제이는 이런 자바 스트림도 디버깅할 수 있습니다.
바로 Stream Trace 라는 기능을 통해서 말이죠.
스트림에 중단점을 찍게 되면 위의 스트림 체인 추적 버튼이 활성화됩니다.
해당 버튼을 누르게 되면 각 연산별로 스트림 원소들이 어떻게 동작되는지를 확인할 수 있습니다.
정말 너무 맛있는 기능입니다.
이 외에도 더 기능들이 있지만 추가 기능들은 심화편으로 돌아오겠습니다.
해당 글이 보시는 분들의 효과적인 디버깅에 도움이 되었으면 좋겠네요!
'우아한테크코스 6기 > 3단계' 카테고리의 다른 글
NoResourceFoundException 에 대해 알아보자 (0) | 2024.08.11 |
---|---|
팀 로깅 전략 구상기 (0) | 2024.08.05 |
Intellij Debugger, 어디까지 알고 사용하고 있나요? - 기초편 (1) | 2024.07.20 |
Java Annotation Processor 와 Lombok (feat. AST) (0) | 2024.07.18 |
팀 코드잽 1차 데모데이 회고 (0) | 2024.07.18 |