.NET Tools
Essential productivity kit for .NET and game developers
Rider의 중단점을 사용한 고급 디버그 기능
개발자는 코드를 디버그하는 데 상당한 시간을 할애합니다. 개인적 선호와 무관하게 코드를 이해하려면 코드를 실행하여 단계별로 살펴보고, 변수에 저장되는 값과 메서드 호출의 결과를 확인할 수밖에 없습니다. 이러한 정보는 코드베이스를 탐색하고, 코드 관련 문제를 확인하여 해결하는 데 유용합니다.
디버그에 대한 이전 게시물에서 .NET 프로젝트의 실행 및 디버그 방법과 중단점을 설정하여 현재 범위의 호출 스택 및 변수를 살펴보고, 단계별로 코드를 실행하는 방법을 설명해 드렸습니다. 예외 중단점, 조건부 중단점, 중단점 도달 횟수 등 디버그와 관련한 추가 팁을 확인해 보세요. 이와 같은 고급 중단점 유형을 활용하면 특정 애플리케이션의 상태 또는 논리 흐름을 디버그하는 시간이 단축되어, 생산성이 향상됩니다.
이 연재물에서 살펴볼 내용은 다음과 같습니다.
이 글에서 설명된 단축키는 Visual Studio 키맵을 기반으로 합니다.
그러면 먼저 Rider에서 지원되는 다양한 중단점 유형을 설명해 드리겠습니다!
중단점 구성
중단점은 왼쪽 여백을 클릭하여 설정할 수 있으며, 코드 줄이 중단점으로 간주되면 빨간색 글머리 기호가 표시됩니다. 또한 F9 키를 사용하여 중단점을 활성화/비활성화할 수도 있습니다.
또한 여러 위치의 중단점에 대한 세부 정보를 확인할 수도 있습니다. 중단점을 마우스 오른쪽 버튼으로 클릭하면 표시되는 컨텍스트 메뉴에서 중단점 활성화/비활성화 및 중단점 도달 시 애플리케이션 일시 중지 여부를 설정할 수 있습니다.
Run(실행) | View Breakpoints…(중단점 표시) 메뉴( Ctrl+Alt+B)를 사용하여 솔루션의 모든 중단점에 대한 요약 정보를 확인할 수 있습니다. 또한 Favorites(즐겨찾기) 도구 창(Alt+2)에도 중단점이 표시됩니다. Breakpoints(중단점) 창에서 중단점을 활성화/비활성화하고 .NET 코드 및 JavaScript 코드에 대한 다양한 옵션을 구성할 수 있습니다.
이제 다양한 옵션을 사용해야 할 경우 및 그 이유를 살펴보겠습니다.
조건부 중단점
애플리케이션의 코드베이스에서, 특정 조건이 true인 경우 중단점에서 실행을 일시 중지하려는 경우를 가정해 보겠습니다. 예를 들어, 특정 값을 기반으로 하나의 특정 케이스를 디버그하기 위해 해당 값을 사용하는 경우, 루프의 중단점에서만 실행을 일시 중지하고 싶을 수 있습니다.
컨텍스트 메뉴(또는 중단점 창의 Ctrl+Alt+B 단축키)를 사용해 조건을 설정하고, 중단점에서 프로그램 실행을 일시 중지하기 위해 true여야 하는 조건을 입력할 수 있습니다. 조건은 C# 코드로 작성 가능하며, 코드 완성 기능도 지원됩니다. Shift+Enter를 눌렀을 때, 텍스트 영역에 비해 조건이 긴 경우 더 큰 에디터 창이 표시됩니다.
이제 디버거는 프로그램 디버그 시 person.Name.Contains("Maarten")
인 경우에만 중단점에서 실행을 일시 중지합니다.
단, 조건이 평가되려면 코드가 유효해야 합니다. 즉,
- 현재 중단점 범위에서 사용 가능한 변수에만 액세스할 수 있습니다.
- 값이 null일 가능성이 있는 경우, 조건 작성 시 null 검사도 추가하는 것이 좋습니다.
애플리케이션을 일시 중지하지 않고 기록/평가
실행을 중단하지 않고 코드를 살펴보거나, 코드 한 줄이 실행될 때마다 로그 메시지를 작성하려는 경우, Rider를 사용하면 매우 간편합니다. 중단점 창(Ctrl+Alt+B)에서 Suspend(일시 중지)(프로그램 실행은 일시 중지되지 않음)의 선택을 해제하고 다음 옵션을 활성화합니다.
- Log message to console(콘솔에 메시지 기록) 옵션을 활성화하면 Rider는 중단점에 도달했을 때 콘솔 출력에 일부 정보를 작성합니다.
- Evaluate and log(평가 및 기록) 옵션은 동일한 기능을 수행하지만, 중단점 도달 여부를 표시하는 대신 표현식을 평가하고 콘솔 출력에 출력합니다.
애플리케이션을 디버그할 경우, 중단점은 프로그램 실행을 일시 중지하지 않고 Debug Output(디버그 출력) 탭에 메시지를 기록합니다.
애플리케이션의 로거도 동일한 기능을 제공하지만, Rider의 기능에는 한 가지 차이가 있습니다. 애플리케이션 코드에 로깅을 추가하고 매번 다시 컴파일하지 않고도 즉시 로깅 메시지를 활성화할 수 있습니다. 조사 대상인 클래스에 로거를 추가하기 위해 연관성이 떨어지는 다른 작업을 하지 않고도 당장의 작업(디버그)에 집중할 수 있습니다.
중단점 도달 횟수
루프를 실행하거나 데이터베이스의 항목 컬렉션을 반복할 경우, 프로그램 실행을 처음 몇 번 혹은 1,000개 이상의 항목을 반복한 후에만 일시 중지하는 기능이 유용할 수 있습니다.
중단점 창(Ctrl+Alt+B)에서 주어진 숫자보다 낮거나, 동일하거나, 더 높게 중단점 도달 횟수를 설정하여 중단점 활성화 시점을 구성할 수 있습니다.
애플리케이션을 디버그할 때 Rider는 중단점이 도달한 횟수를 추적하고, 구성된 도달 횟수에 따라 프로그램 실행을 일시 중지하거나 콘솔에 기록합니다.
한 번만 중단: 임시 중단점
예를 들어 루프의 첫 반복이나 일부 연산이 처음 실행될 때 중단점에 한 번만 도달하도록 설정하려는 경우, 중단점 창(Ctrl+Alt+B)에서 Remove once hit(도달 시 제거) 옵션을 활성화하면 됩니다.
Rider는 디버그 중 이 중단점에서 애플리케이션 런타임을 한 번만 일시 중지하고, 중단점은 도달된 후에 제거합니다.
다른 중단점에 도달할 때까지 중단점 비활성화: 종속 중단점
Rider 디버거에서 제가 개인적으로 가장 좋아하는 기능 중 하나는 종속 중단점입니다. 다른 중단점에 먼저 도달할 때까지 중단점이 비활성화되도록 구성할 수 있습니다. 이 기능이 도움이 되는 다양한 사례가 있습니다.
간단한 사례를 살펴보겠습니다. 컬렉션을 반복할 때 person.Company.Name == "JetBrains"
를 확인하는 조건부 중단점을 추가했습니다. 이 중단점은 프로그램 실행을 일시 중지하지 않고 조건이 true일 때만 기록합니다.
두 번째 중단점은 첫 번째 중단점에 종속됩니다. ‘JetBrains’가 지정된 컬렉션의 첫 번째 항목에 도달한 후에만 애플리케이션이 중단되도록 설정하려 합니다.
디버거에 연결된 상태에서 코드를 실행할 때, 마지막 중단점은 첫 번째 중단점에 도달하는 순간까지 무시됩니다. 기본적으로 데이터를 반복할 때마다 스텝오버 또는 스텝인투해야 하는 방해 요소가 제거됩니다.
종속 중단점은 예외 중단점에도 종속될 수 있습니다. 즉, 중단점은 코드의 특정 예외가 발생해야만 도달됩니다.
예외 중단점
디버그 과정에서 예외 발생 시 프로그램 실행을 일시 중지하는 기능은 흥미로울 수 있습니다. 예를 들어, FileNotFoundException 발생 시 프로그램 실행을 중단하려면 프로그램의 실행 상태를 확인하고 사용하려던 파일을 살펴보고, 예외 발생 원인을 조사할 수 있습니다.
예외 중단점은 Run(실행) | Stop on Exception…(예외에서 중단) 메뉴 또는 중단점 창(Ctrl+Alt+B) 툴바에서 추가할 수 있습니다. 중단점을 설정하려는 예외 유형을 지정하거나 Stop on all .NET Exceptions(모든 .NET 예외에서 중단)를 사용해야 합니다.
예외 중단점에서는 다른 옵션도 구성할 수 있습니다. 필요할 때 중단점을 활성화/비활성화하고, 프로그램 실행 일시 중지를 선택하고, 콘솔에 기록하고, 임시 또는 종속 중단점으로 설정할 수 있습니다. ‘Just my code'(내 코드만) 옵션도 사용 가능합니다.
예외 중단점은 알려진 예외 유형에 대해 애플리케이션을 검사하는 데 유용하지만, 처리되지 않은 예외 발생 시 애플리케이션을 일시 중지하려면 어떻게 해야 할까요? Rider 설정(Ctrl+Alt+S)의 Build, Execution, Deployment(빌드, 실행, 배포) | Debugger(디버거)에서 이 옵션을 활성화하면 됩니다.
실수로 중단점 제거 방지
디버그 모드에서 실수로 중단점을 클릭하는 상황이 발생할 수 있습니다. 의도한 클릭이라면 문제 없지만 의도치 않게 클릭한 경우, 중단점을 제거하면 해당 설정(예: 조건, 도달 횟수 등)도 제거되어 문제가 발생할 수 있습니다.
Rider는 실수로 중단점을 제거하지 않도록 방지하는 옵션을 지원합니다. Build, Execution, Deployment(빌드, 실행, 배포) | Debugger(디버거)에서 Remove breakpoint(중단점 제거) 옵션을 Drag to the editor area(에디터 영역으로 드래그)로 설정하면 됩니다.
이 옵션이 활성화되면 실수로 중단점을 클릭해도 중단점은 제거되지 않고, 비활성화됩니다. 실수로 중단점을 제거하여 조건과 같은 매개변수가 사라질 염려가 없습니다. 또한 마우스를 사용해 중단점을 제거하려면 에디터로 드래그하면 됩니다.
이 글에서 다양한 유형의 중단점을 살펴보았습니다.
- 애플리케이션의 특정 코드 줄에서 프로그램 실행을 일시 중지하는 코드 줄 중단점.
- 특정 조건이 true인 경우에만 프로그램 실행을 일시 중지하는 조건부 중단점.
- 특정 예외가 발생할 때마다 프로그램 실행을 일시 중지하는 예외 중단점.
Rider는 이러한 중단점 기능에 도달 횟수, 임시 중단점 및 종속 중단점을 결합하여 애플리케이션 코드를 더 효율적으로 디버그하고, 특정 애플리케이션 상태를 디버그하는 데 필요한 시간을 단축할 수 있습니다!
JetBrains Rider를 다운로드하여 사용해보고 피드백을 전해주세요.
게시물 원문 작성자