이 문서에서는 단계별 연습에서 Visual Studio 디버거의 기능을 소개합니다. 디버거 기능의 상위 수준 보기를 원하는 경우 먼저 디버거살펴보세요. 앱을 디버그할 때 일반적으로 디버거가 연결된 애플리케이션을 실행하고 있음을 의미합니다. 이 작업을 수행할 때 디버거는 코드가 실행되는 동안 수행하는 작업을 확인하는 여러 가지 방법을 제공합니다. 코드를 단계별로 실행하고 변수에 저장된 값을 살펴보고, 변수에 대한 감시를 설정하여 값이 변경되는 시기를 확인하고, 코드의 실행 경로를 검사하고, 코드 분기가 실행 중인지 등을 확인할 수 있습니다. 이 연습이 처음으로 코드를 디버그하려고 시도하는 경우 이 문서를 진행하기 전에 절대 초보자를 위한 디버깅 을 읽어보는 것이 좋습니다.
데모 앱은 C#이지만 대부분의 기능은 C++, Visual Basic, F#, Python, JavaScript 및 Visual Studio에서 지원하는 기타 언어에 적용됩니다(F#은 편집 및 계속을 지원하지 않음). F# 및 JavaScript는 자동 창을 지원하지 않습니다.) 스크린샷은 C#에 있습니다.
이 자습서에서는 다음을 수행합니다.
- 디버거를 시작하고 중단점을 만납니다.
- 디버거에서 코드를 단계별로 실행하기 위한 명령 알아보기
- 데이터 팁 및 디버거 창에서 변수 검사
- 호출 스택 검사
필수 조건
Visual Studio 2022 및 .NET 데스크톱 개발 워크로드가 설치되어 있어야 합니다.
Visual Studio를 아직 설치하지 않은 경우 Visual Studio 다운로드 페이지로 이동하여 무료로 설치합니다.
Visual Studio가 이미 있지만 .NET 데스크톱 개발 워크로드가 설치되지 않은 경우 도구>가져오기 도구 및 기능...으로 이동하여 Visual Studio 설치 관리자를 시작합니다. Visual Studio 설치 관리자에서 .NET 데스크톱 개발 워크로드를 선택한 다음 수정을 선택합니다.
프로젝트 만들기
먼저 .NET Core 콘솔 애플리케이션 프로젝트를 만듭니다. 프로젝트 유형은 아무것도 추가하기 전에 필요한 모든 템플릿 파일을 제공합니다.
Visual Studio를 엽니다. 시작 창이 열려 있지 않으면 파일>시작 창을 선택합니다.
시작 창에서 새 프로젝트 만들기를 선택합니다.
새 프로젝트 만들기 창의 검색 상자에 콘솔을 입력합니다. 그런 다음 언어 목록에서 C# 을 선택한 다음 플랫폼 목록에서 Windows 를 선택합니다.
언어 및 플랫폼 필터를 적용한 후 콘솔 앱 템플릿을 선택한 다음, 다음을 선택합니다.
비고
콘솔 앱 템플릿이 표시되지 않으면 새 프로젝트 만들기 창에서 설치할 수 있습니다. 원하는 항목을 찾지 못하시겠습니까? 메시지에서 추가 도구 및 기능 설치 링크를 선택합니다. 그런 다음 Visual Studio 설치 관리자에서 .NET 데스크톱 개발 워크로드를 선택합니다.
새 프로젝트 구성 창의 프로젝트 이름 상자에 GetStartedDebugging을 입력합니다. 그런 후에 다음을 선택합니다.
추가 정보 창의 프레임워크 드롭다운 메뉴에서 .NET 8.0이 선택되어 있는지 확인하고 만들기를 선택합니다.
Visual Studio에서 새 프로젝트를 엽니다.
애플리케이션 만들기
Program.cs 기본 코드를 모두 다음 코드로 바꿉다.
using System;
class ArrayExample
{
static void Main()
{
char[] letters = { 'f', 'r', 'e', 'd', ' ', 's', 'm', 'i', 't', 'h'};
string name = "";
int[] a = new int[10];
for (int i = 0; i < letters.Length; i++)
{
name += letters[i];
a[i] = i + 1;
SendMessage(name, a[i]);
}
Console.ReadKey();
}
static void SendMessage(string name, int msg)
{
Console.WriteLine("Hello, " + name + "! Count to " + msg);
}
}
디버거를 시작합니다.
디버거 명령을 실행하는 빠른 방법이기 때문에 대부분 여기에서 바로 가기 키를 사용합니다. 도구 모음 또는 메뉴 명령과 같은 동일한 명령도 적어 줍니다.
디버거를 시작하려면 F5 키를 선택하거나 표준 도구 모음에서 대상 디버그 단추를 선택하거나 디버그 도구 모음에서 디버깅 시작 단추를 선택하거나 메뉴 모음에서 디버그>시작 디버깅을 선택합니다.
F5 는 앱 프로세스에 연결된 디버거를 사용하여 앱을 시작합니다. 코드를 검사하기 위해 특별한 작업을 수행하지 않았으므로 앱이 완료될 때 콘솔 출력이 표시됩니다.
Hello, f! Count to 1 Hello, fr! Count to 2 Hello, fre! Count to 3 Hello, fred! Count to 4 Hello, fred ! Count to 5 Hello, fred s! Count to 6 Hello, fred sm! Count to 7 Hello, fred smi! Count to 8 Hello, fred smit! Count to 9 Hello, fred smith! Count to 10디버거를 중지하려면 Shift+F5를 선택하거나 디버그 도구 모음에서 디버깅 중지 단추를 선택하거나 메뉴 모음에서 디버그>중지 디버깅을 선택합니다.
콘솔 창에서 아무 키나 선택하여 콘솔 창을 닫습니다.
중단점 설정 및 디버거 시작
for함수 루프Main에서 다음 코드 줄의 왼쪽 여백을 클릭하여 중단점을 설정합니다.name += letters[i];중단점을 설정하는 빨간색 원이 나타납니다.
중단점은 신뢰할 수 있는 디버깅의 필수 기능입니다. 변수 값이나 메모리 동작을 확인하거나 코드 분기가 실행되고 있는지 여부를 알 수 있도록 Visual Studio에서 실행 중인 코드를 일시 중지할 중단점을 설정할 수 있습니다.
디버깅을 시작하려면 F5 키를 선택하거나 표준 도구 모음에서 대상 디버그 단추를 선택하거나 디버그 도구 모음에서 디버깅 시작 단추를 선택하거나 메뉴 모음에서 디>버그 시작 디버깅을 선택합니다. 앱이 시작되고 디버거가 중단점을 설정한 코드 줄로 이동합니다.
노란색 화살표는 디버거가 일시 중지된 문을 가리킵니다. 앱 실행은 명령문이 아직 실행되지 않은 상태에서 동일한 지점에서 일시 중지됩니다.
앱이 실행되고 있지 않으면 F5 는 첫 번째 중단점에 도달할 때까지 앱을 실행하는 디버거를 시작합니다. 앱이 중단점에서 일시 중지된 경우 F5 는 다음 중단점에 도달할 때까지 앱을 계속 실행합니다.
중단점은 자세히 검사하려는 코드의 줄 또는 섹션을 알고 있을 때 유용한 기능입니다. 조건부 중단점과 같이 설정할 수 있는 다양한 유형의 중단점에 대한 자세한 내용은 중단점 사용을 참조하세요.
데이터 팁을 사용하여 코드 탐색 및 데이터 검사
name += letters[i]문에서 코드 실행이 일시 중지된 동안,letters변수를 마우스로 가리키면 배열 크기 및 요소 형식char[10]을 보여 주는 데이터 팁이 표시됩니다.비고
디버거의 가장 유용한 기능 중 하나는 변수를 검사하는 기능입니다. 종종 문제를 디버그하려고 할 때 변수에 특정 시간에 예상되는 값이 있는지 확인하려고 합니다. 데이터 팁을 보는 것은 이를 확인하는 좋은 방법입니다.
변수를
letters확장하여 모든 배열 요소와 해당 값을 봅니다.
변수를 마우스로
name가리켜 현재 값(빈 문자열)을 확인합니다.디버거를 다음 문으로 이동하려면 F10을 선택하거나 디버그 도구 모음에서 단계별 실행 단추를 선택하거나 메뉴 모음에서 디버그>단계를 선택합니다. F10을 두 번 더 선택하여 메서드 호출을
SendMessage지나 이동합니다.F10 은 코드가 계속 실행되지만 함수 또는 메서드를 한 단계씩 실행하지 않고 디버거를 진행합니다. 이러한 방식으로 지금은 관심이 없는 메서드의 코드
SendMessage디버깅을 건너뛰었다.루프를
for몇 번 반복하려면 F10 을 반복해서 선택합니다. 각 루프 반복에서 중단점에서 일시 중지하고, 그런 다음 변수를 마우스로 가리켜 데이터 팁에서 그 값을 확인합니다.
변수 값은
for루프를 반복할 때마다 변경되어f값을 표시한 다음,fr,fre등의 값을 표시합니다. 루프를 통해 디버거를 더 빠르게 진행하려면 대신 F5 를 선택하여 다음 문 대신 중단점으로 이동합니다.코드 실행이
for메서드의 루프에서 일시 중지되는 동안Main을 선택하거나, 디버그 툴바에서 단계 진입 버튼을 선택하거나, 메뉴 모음에서 디버그>을 선택하여 메서드 호출에 도달할 때까지 반복합니다.디버거는 다음 코드 줄에서 일시 중지해야 합니다.
SendMessage(name, a[i]);메서드를
SendMessage한 단계씩 실행하려면 F11을 다시 선택합니다.노란색 포인터가
SendMessage메서드로 들어갑니다.
F11 을 사용하면 코드의 실행 흐름을 좀 더 자세히 검사할 수 있습니다. 메서드 호출에서 메서드를 한 단계씩 실행하려면 F11을 선택합니다. 기본적으로 디버거는 비사용자 메서드로의 단계별 실행은 건너뜁니다. 비사용자 코드 디버깅에 대한 자세한 내용은 내 코드만 참조하세요.
디버깅을
SendMessage메서드를 완료하면,for메서드의main루프로 돌아갈 준비가 된 것입니다.메서드를
SendMessage나가려면 Shift+F11을 선택하거나 디버그 도구 모음에서 단계 건너뛰기 단추를 선택하거나 메뉴 모음에서 디버그>단계 건너뛰기를 선택합니다.Step Out 은 앱 실행을 다시 시작하고 현재 메서드 또는 함수가 반환될 때까지 디버거를 진행합니다.
for메서드의 루프에서Main메서드 호출 시 일시 중지된SendMessage위치에 노란색 포인터가 다시 보입니다. 코드를 이동하는 다양한 방법에 대한 자세한 내용은 디버거코드 탐색을 참조하세요.
코드에서 클릭하여 탐색
F5 키를 선택하여 중단점으로 다시 진행합니다.
코드 편집기에서
Console.WriteLine메서드의SendMessage메서드 호출 위에 마우스를 올려 Run to Click 버튼이 나타날 때까지 기다립니다. 단추의 도구 설명에는 "여기까지 실행"이 표시됩니다.
실행하여 클릭 단추를 선택합니다. 또는 문에 커서를 놓고
Console.WriteLineCtrl+F10을 누릅니다. 또는 메서드 호출을 마우스 오른쪽 단추로Console.WriteLine클릭하고 상황에 맞는 메뉴에서 커서로 실행을 선택합니다.디버거가
Console.WriteLine메서드 호출로 이동합니다.클릭으로 실행 단추를 사용하는 것은 임시 중단점을 설정하는 것과 유사하며 열려 있는 파일에서 앱 코드의 표시되는 영역 내에서 빠르게 탐색하는 데 편리합니다.
앱을 빠르게 다시 시작합니다.
디버거에서 처음부터 앱을 다시 실행하려면 Ctrl+Shift+F5를 선택하거나 디버그 도구 모음에서 다시 시작 단추를 선택하거나 메뉴 모음에서 디버그>다시 시작을 선택합니다.
다시 시작 은 디버거를 중지한 다음 한 단계로 다시 시작합니다. 디버거가 다시 시작되면, 먼저 for 루프 내부에서 이전에 설정한 중단점인 첫 번째 중단점까지 실행되고 나서 일시 중지합니다.
자동 및 지역 창으로 변수 검사
디버깅하는 동안 자동 및 지역 창에 변수 값이 표시됩니다. 창은 디버그 세션 중에만 사용할 수 있습니다. 자동 창에는 디버거가 있는 현재 줄과 이전 줄에 사용되는 변수가 표시됩니다. Locals 창에는 로컬 범위에 정의된 변수(일반적으로 현재 함수 또는 메서드)가 표시됩니다.
디버거가 일시 중지된 동안 코드 편집기의 맨 아래에 있는 자동 창을 봅니다.
자동 창이 닫혀 있는 경우 Ctrl+D, A를 선택하거나 메뉴 모음에서Windows>자동>를 선택합니다.
디버거가 계속 일시 중지된 상태에서 자동 창 옆의 탭에서 로컬 창을 봅니다.
로컬 창이 닫힌 경우 Ctrl+D, L을 선택하거나Windows> 로컬 디버그>를 선택합니다.
지역 창에서 변수를
letters확장하여 해당 배열 요소와 해당 값을 확인합니다.
자동 및 지역 창에 대한 자세한 내용은 자동 및 지역 창에서 변수 검사를 참조하세요.
시계 설정
코드를 단계별로 실행할 때 감시 창에 추가하여 주시하려는 변수 또는 식을 지정할 수 있습니다.
디버거가 일시 중지된 동안
name변수를 마우스 오른쪽 버튼으로 클릭하여 조사식 추가를 선택합니다.기본적으로 코드 편집기 아래쪽에 Watch 창이 열립니다.
이제 변수에 대한
name감시를 설정했으므로 코드를 단계별로 실행하여 각name루프 반복에 따라 변수의for값이 변경되는지 확인합니다.다른 변수 창과 달리 감시 창에는 항상 관찰 중인 변수들이 표시됩니다. 범위를 벗어난 변수는 사용할 수 없는 것으로 표시됩니다.
감시식 창에 대한 자세한 내용은 감시식 창으로 변수 감시하기를 참조하세요.
호출 스택 검사
호출 스택은 메서드 및 함수가 호출되는 순서를 표시하여 앱의 실행 흐름을 이해하는 데 도움이 될 수 있습니다.
디버거가 루프에서
for일시 중지되는 동안 코드 편집기의 오른쪽 아래 창에서 기본적으로 열리는 호출 스택 창을 봅니다.호출 스택 창이 닫힌 경우 Ctrl+D, C를 선택하거나 메뉴 모음에서Windows>호출 스택>를 선택합니다.
호출 스택 창에 현재
Main메서드에 노란색 포인터가 표시됩니다.메서드에서 디버거가 일시 중지될 때까지 F11 을
SendMessage몇 번 선택합니다.호출 스택 창의 위쪽 줄에는 메서드인 현재 함수가
SendMessage표시됩니다. 두 번째 줄은SendMessage메서드가Main메서드에서 호출되었음을 보여줍니다.
비고
호출 스택 창은 Eclipse와 같은 일부 IDE의 디버그 큐브 뷰와 유사합니다.
호출 스택 창에서 코드 줄을 두 번 클릭하여 해당 소스 코드로 이동하여 디버거에서 검사 중인 현재 범위를 변경할 수 있습니다. 이 작업은 디버거를 다음 단계로 이동시키지 않습니다.
호출 스택 창에서 마우스 오른쪽 단추 클릭 메뉴를 사용하여 다른 작업을 수행할 수도 있습니다. 예를 들어 지정된 함수에 중단점을 삽입하거나, 커서로 실행을 사용하여 디버거를 진행하거나, 소스 코드로 이동합니다.
호출 스택에 대한 자세한 내용은 방법: 호출 스택 검사 방법을 참조하세요.
다음 단계
이 자습서에서는 디버거를 시작하고, 코드를 단계별로 실행하고, 변수를 검사하는 방법을 알아보았습니다. 자세한 정보에 대한 링크와 함께 디버거 기능을 개략적으로 살펴볼 수 있습니다.
먼저 디버거 살펴보기