본문 바로가기

개발/Java

디버깅

배경


개발 입문자인 저는 아직도 코드를 짤 때마다 System.out.println을 써서 여기저기 찍어보는 일이 대다수고, logging정도만 가끔씩 활용해서 문제를 해결하려고 합니다.

 

debugging을 봐도 사실 어떻게 해야될지 잘 모르겠고... 하지만 더이상 이렇게 갈 순 없겠죠? 디버깅을 조금씩 써보면서 문제점을 빠르게 찾고 해결할 수 있는 능력을 길러야 겠습니다. 오늘은 디버깅에 대해 알아보도록 하죠.

 

내용


디버깅의 처음 시작은 프로그램의 흐름을 파악할 수 있는 break point를 활용해 의심가는 지점을 찾는 것입니다.

intellij 기준으로 코드 왼쪽편 라인 근처에 빨간색으로 break point를 찍을 수 있죠. 이 break point는 디버깅을 시작하게 되면 멈추게 되는 포인트입니다.

 

실행을 하게 되면 아래와 같은 창이 나오게 됩니다. 왼쪽에 빨간색으로 테두리친 부분이 stack flow입니다. 이 부분에는 break point가 잡힌 부분까지의 stack들을 보여주고 있습니다.

 

오른쪽에 variables는 현재 잡힌 지역 스코프의 지역 변수들을 보여줍니다. 상태를 하나하나 넘어가면 이 부분에 지역변수의 값들이 추가되게 됩니다. 진행 시키는 버튼은 다음과 같습니다.

보통 처음에 많이 사용하는 부분이 step over와 resume 2가지만 사용한다고 합니다. 아마 저도 그럴 것 같긴 합니다만...

다른 버튼들의 기능을 좀 더 들여다보고 앞으로 디버깅을 잘 활용할 수 있는 능력을 길러봅시다.

 

  •  step into는 break point로 잡힌 부분에서 실행되는 메소드 안으로 들어가게 해줍니다.
  • step out은 해당 메소드를 실행시키고 밖으로 나오도록 해줍니다.
  • drop frame은 실행되지 않고 step out되도록 해주는 버튼입니다.
  • run to cursor 버튼은 디버깅중 break point를 찍지 않고 코드에 커서가 찍혀있는 부분에 진행이 멈춰집니다.

 

디버깅을 처음 쓰면 짜증나는 부분 중에 하나가 반복문에서 특정 반복 횟수의 값을 어떻게 확인해야하나 입니다. 반복문이 짧다면 상관없지만, 100번 반복중에 71번째를 확인해보고싶다.. 이렇게되면 step over를 하나하나 계속 세아려가면서 누를 수도 없는 부분이죠. 이때 활용할 수 있는 것이 break point로 표시한 빨간 점에서 우클릭을 하는 것입니다.

여기서 condition에는 현재 break point가 잡힌 부분에 있는 모든 method들을 활용할 수 있습니다. 여기서 특정 조건에 대한 확인을 하고 싶으면 그 값을 설정해서 넣어주면 됩니다.

 

또 다른 기능으로는 evaluate라는 기능이 있습니다.

디버깅 실행 후 break point에서 멈췄을 때 저 버튼을 누르게 되면 Expression을 사용할 수 있는데, 여기서는 현재 사용할 수 있는 모든 메서드들의 결과값을 볼 수 있습니다. 주의해야할 점은, 이 부분에서 특정 메서드에 값을 주입하는 코드를 입력하면 실제 코드에 적용되니 이 부분은 사용에 주의해야 합니다.

 

다음 기능은 watch라는 기능입니다.

여기에 미리 보고 싶은 값을 지정해놓으면 break point가 걸릴 때마다 지정된 값을 보여주게 됩니다. 예를들여 user.getName()을 해놓을 시 break point마다 이 값을 보여주게 되는거죠.

 

마지막의 두 기능 evaluate와 watch를 잘 사용하게 된다면 정말 빠르게 원인을 찾아볼 수 있습니다. 여기에 숙달이 되도록 디버깅시 활용을 많이 해보도록 해야겠네요. 어떤 값이 제대로 들어오고 안들어왔는지  빠르게 파악하는 부분을 활용해서 문제 해결을 빠르게 하는 개발자가 되어봅시다!

'개발 > Java' 카테고리의 다른 글

Java GC(Garbage Collector)  (1) 2024.12.04
TaskScheduler를 이용한 주문 취소 구현해보기  (0) 2024.11.27
Fetch Join  (0) 2024.11.24
Block vs Non-Block & Sync vs Async  (0) 2024.11.23
Thread Pool  (1) 2024.11.22