중단점 없이 디버깅하기
다른 언어: EnglishEspañolFrançaisDeutsch日本語Português中文
일반적인 디버깅 시나리오에서는, 디버거가 프로그램을 언제 중단해야 하는지 알려주기 위해 중단점을 설정하게 됩니다. 중단점은 대개 추가 조사를 시작하기 위한 시점을 표시합니다.
중단점을 어디에 설정해야 할지 결정하는 것은 쉽지 않을 수 있습니다. 정확한 라인이 모호할 수 있거나, 특정 코드보다는 시간에 따라 프로그램을 일시 중지하는 것을 선호할 수도 있습니다.
이 글에서는 IntelliJ IDEA의 프로그램 일시 중지 (Pause Program) 기능에 대해 알아보겠습니다. 이 기능은 앞서 설명한 시나리오를 포함해 어떤 상황에서든 매우 강력할 수 있는 알려지지 않은 디버깅 기술입니다. 이 기능의 사용 사례와 한계, 그리고 숨겨진 단계 수행 트릭을 살펴볼 것입니다.
Pause란 무엇인가?
프로그램 일시 중지 (Pause Program)는 IntelliJ IDEA의 디버거에서 프로그램을 임의적으로 주어진 시점에 중단할 수 있게 해주는 기능입니다. 게다가, 애플리케이션 코드를 알 필요조차 없습니다. 사실, 완전히 무시할 수도 있습니다!
프로그램을 일시 중지하려면 디버거의 툴바에서 프로그램 일시 중지 (Pause Program)를 클릭하면 됩니다. 그러면 프로그램은 그 중간에 무엇을 하든 주저 없이 바로 중단됩니다.
한계점
처음 보았을 때, 일시 정지된 프로그램은 중단점에서 중단된 프로그램과 똑같아 보일 수 있습니다. 그러나, 이것은 일정 부분까지만 사실입니다.
프로그램 일시 중지 (Pause Program)를 종류의 스레드 덤프 플러스 정도로 간주하는 것이 맞습니다. 기본적으로 변수와 스레드를 검사하는 것처럼 여전히 검사할 수 있습니다. 그러나, 표현식 평가 (Evaluate Expression)와 같은 보다 고급 기능들은 작동하지 않을 수 있습니다.
사용 사례
프로그램 일시 중지 (Pause Program)를 사용할 수 있는 방법은 무수히 많습니다. 자주 전통적인 중단점과 서로 바꿔 사용할 수 있습니다. 그러나, 프로그램 일시 중지 (Pause Program)가 더 적합한 접근법인 시나리오도 있습니다. 다음은 그중 몇 가지를 살펴보겠습니다.
반응하지 않는 앱
UI가 멈추면, 그것은 대부분 UI 스레드가 차단되었기 때문입니다.
이 경우에 프로그램 일시 중지 (Pause Program)가 유용할 수 있습니다. 이 기능을 사용하면 반응하지 않는 애플리케이션을 일시 중지 하고 UI 스레드의 호출 스택을 검사할 수 있습니다. 이것만으로도 문제를 진단하는 데 충분합니다.
소스 코드 누락
앞서 언급했듯이, 프로그램 일시 중지 (Pause Program)는 소스 코드를 완전히 무시할 수 있게 해줍니다. 소스 코드가 누락되어 있을 수도 있겠죠. 이런 시나리오는 그리 흔하지 않지만, 마주하게 된다면, 중단점은 그리 도움이 되지 않을 것입니다.
이럴 때 프로그램 일시 중지 (Pause Program)가 필요한 경우가 있습니다!
Locks
데드락이나 라이브락과 같은 동기화 문제가 의심될 경우, 프로그램 일시 중지 (Pause Program)는 문제를 일으키는 정확한 스레드와 락을 찾는 데 도움이 될 수 있습니다.
이 경우, 프로그램을 일시 중지하고 스레드 목록을 검사합니다. 그러면 어떤 스레드가 차단되었는지 보여줄 것입니다. 실행 지점으로 이동하면, 또한 그들이 잠긴 중요한 영역들도 확인할 수 있습니다. 이 정보가 문제 해결을 위한 방향을 제시하는 데 도움이 될 수 있습니다.
비밀 단계 수행 트릭
앞서 지적했듯이, 프로그램 일시 중지 (Pause Program)는 고급 디버거 기능에 대한 접근을 비교적 제한합니다. 애플리케이션이 일시 중지된 상태에서 특정 기능을 사용하려고 시도했다면, 일시 정지 액션 이후 메서드를 평가할 수 없음 (Cannot evaluate methods after Pause action)라는 에러 메시지를 볼 수 있습니다.
그러나, 이 제한에 대한 해결책이 있습니다.
애플리케이션을 일시 중지한 후, 어떤 단계 수행 행동을 수행하면 됩니다. 스텝인투 (Step Into) 또는 스텝오버 (Step Over) 둘 중 어느 것이든 상관없습니다. 일단 그것이 끝나면, 중단점을 사용하여 애플리케이션을 일시 중지하는 것과 비슷한 일반적인 디버깅 세션에 들어갈 수 있게 됩니다. 이제 모든 고급 기능이 열려있습니다!
결론
오늘은 이 정도입니다! 이 팁과 트릭을 유용하게 사용하기를 바랍니다.
Java 디버깅에 대해 특정 주제를 다뤄달라는 것이 있다면, 망설이지 말고 연락해 주세요! 여러분의 피드백은 가장 흥미로운 내용을 우선적으로 발행하는 데 도움이 될 것입니다.