다음을 통해 공유


자습서: Visual Studio Code를 사용하여 .NET 콘솔 애플리케이션 디버그

이 자습서에서는 .NET 앱 작업을 하는 데 Visual Studio Code에서 사용할 수 있는 디버깅 도구를 소개합니다.

필수 조건

디버그 빌드 구성 사용

디버그릴리스는 .NET의 기본 빌드 구성입니다. 디버그 빌드 구성은 디버깅에 사용하고, 릴리스 구성은 최종 릴리스 배포에 사용합니다.

디버그 구성에서 프로그램은 완전히 기호화된 디버그 정보를 사용하여 컴파일되며 최적화되지 않습니다. 최적화하면 소스 코드와 생성된 명령 간의 관계가 복잡해지므로 디버깅이 복잡해집니다. 프로그램의 릴리스 구성은 완전히 최적화되고, 기호화된 디버그 정보를 포함하지 않습니다.

기본적으로 Visual Studio Code 시작 설정은 디버그 빌드 구성을 사용하므로 디버깅 전에 변경할 필요가 없습니다.

  1. Visual Studio Code 시작

  2. Visual Studio Code를 사용하여 .NET 콘솔 애플리케이션 만들기에서 만든 프로젝트의 폴더를 엽니다.

중단점 설정

중단점은 중단점이 설정된 줄이 실행되기 전에 애플리케이션 실행을 일시적으로 중단합니다.

  1. Program.cs 파일을 엽니다.

  2. 이름, 날짜, 시간을 표시하는 줄에서 코드 창 왼쪽 여백을 클릭하여 ‘중단점’을 설정합니다. 왼쪽 여백은 줄 번호의 왼쪽에 있습니다. F9 키를 누르거나 코드 줄이 선택된 상태로 메뉴에서 실행>중단점 설정/해제를 선택해도 중단점을 설정할 수 있습니다.

    Visual Studio Code에서는 왼쪽 여백에 빨간 점을 표시하여 중단점이 설정된 줄을 표시합니다.

    Breakpoint set

터미널 입력에 대해 설정

중단점은 Console.ReadLine 메서드 호출 뒤에 있습니다. 디버그 콘솔은 실행 중인 프로그램에 대한 터미널 입력을 허용하지 않습니다. 디버깅 중에 터미널 입력을 처리하기 위해 통합 터미널(Visual Studio Code 창 중 하나) 또는 외부 터미널을 사용할 수 있습니다. 이 자습서에서는 통합 터미널을 사용합니다.

  1. 프로젝트 폴더에는 .vscode 폴더가 포함되어 있습니다. .vscode 폴더에 있는 launch.json 파일을 엽니다.

  2. launch.json에서 console 설정을 internalConsole에서 integratedTerminal로 변경합니다.

    "console": "integratedTerminal",
    
  3. 변경 내용을 저장합니다.

디버그 시작

  1. 왼쪽 메뉴에서 디버깅 아이콘을 선택하여 디버그 보기를 엽니다.

    Open the Debug tab in Visual Studio Code

  2. .NET Core 시작(콘솔) 옆에 있는 창 맨 위의 녹색 화살표를 선택합니다. F5 키를 누르거나 메뉴에서 실행>디버깅 시작을 선택해도 디버깅 모드에서 프로그램을 시작할 수 있습니다.

    Start debugging

  3. 터미널 탭을 선택하면 응답을 기다리기 전에 프로그램이 표시하는 "이름이 무엇인가요?"라는 메시지가 표시됩니다.

    Select the Terminal tab

  4. 이름을 묻는 프롬프트에 대한 응답으로 터미널 창에 문자열을 입력하고 Enter 키를 누릅니다.

    중단점에 도달할 때와 Console.WriteLine 메서드가 실행되기 전에 프로그램 실행이 중지됩니다. 변수 창의 지역 섹션에는 현재 실행 중인 메서드에 정의된 변수 값이 표시됩니다.

    Breakpoint hit, showing Locals

디버그 콘솔 사용

디버그 콘솔 창을 통해 디버그하는 애플리케이션과 상호 작용할 수 있습니다. 변수 값을 변경하여 프로그램에 미치는 영향을 확인할 수 있습니다.

  1. 디버그 콘솔 탭을 선택합니다.

  2. 디버그 콘솔 창의 맨 아래에 있는 프롬프트에 name = "Gracie"를 입력하고 Enter 키를 누릅니다.

    Change variable values

  3. 디버그 콘솔 창의 맨 아래에 currentDate = DateTime.Parse("2019-11-16T17:25:00Z").ToUniversalTime()을 입력하고 Enter 키를 누릅니다.

    변수 창에 namecurrentDate 변수의 새 값이 표시됩니다.

  4. 도구 모음에서 계속 단추를 선택하여 프로그램 실행을 계속합니다. F5 키를 눌러도 계속 진행할 수 있습니다.

    Continue debugging

  5. 터미널 탭을 다시 선택합니다.

    콘솔 창에 표시되는 값은 디버그 콘솔에서 변경한 값과 일치합니다.

    Terminal showing the entered values

  6. 아무 키나 눌러 애플리케이션을 종료하고 디버깅을 중지합니다.

조건부 중단점 설정

프로그램은 사용자가 입력하는 문자열을 표시합니다. 사용자가 아무 값도 입력하지 않으면 어떻게 되나요? 조건부 중단점이라는 유용한 디버깅 기능을 사용하여 이를 테스트할 수 있습니다.

  1. 중단점을 나타내는 빨간색 점을 마우스 오른쪽 단추로 클릭합니다(macOS에서는 Ctrl을 누른 채로 클릭). 상황에 맞는 메뉴에서 중단점 편집을 선택하면 조건식을 입력할 수 있는 대화 상자가 열립니다.

    Breakpoint context menu

  2. 드롭다운에서 Expression을 선택하고 다음 조건식을 입력한 후 Enter 키를 누릅니다.

    String.IsNullOrEmpty(name)
    

    Enter a conditional expression

    디버거는 중단점이 적중될 때마다 String.IsNullOrEmpty(name) 메서드를 호출하고, 메서드 호출이 true를 반환하는 경우에만 이 줄에서 중단합니다.

    조건식 대신 문이 지정된 횟수만큼 실행되기 전에 프로그램 실행을 중단하는 적중 횟수를 지정할 수 있습니다. 필터 조건을 지정할 수도 있으며, 이렇게 하면 스레드 식별자, 프로세스 이름 또는 스레드 이름과 같은 특성을 기준으로 프로그램 실행이 중단됩니다.

  3. F5 키를 눌러 디버깅으로 프로그램을 시작합니다.

  4. 터미널 탭에서 이름을 입력하라는 메시지가 나타나면 Enter 키를 누릅니다.

    namenull 또는 String.Empty이라는 지정한 조건이 충족되었으므로 중단점에 도달한 후 Console.WriteLine 메서드가 실행되기 전에 프로그램 실행이 중지됩니다.

    변수 창에 name 변수 값이 "" 또는 String.Empty임이 표시됩니다.

  5. 디버그 콘솔 프롬프트에 다음 문을 입력하고 Enter 키를 눌러 값이 빈 문자열인지 확인합니다. 결과는 true입니다.

    name == String.Empty
    
  6. 도구 모음에서 계속 단추를 선택하여 프로그램 실행을 계속합니다.

  7. 터미널 탭을 선택하고 아무 키나 눌러 프로그램을 종료하고 디버깅을 중지합니다.

  8. 코드 창 왼쪽 여백에 있는 점을 클릭하여 중단점을 지웁니다. F9를 누르거나 코드 줄이 선택된 상태로 메뉴에서 실행 > 중단점 설정/해제를 선택해도 중단점을 지울 수 있습니다.

  9. 중단점 조건이 손실된다는 경고가 표시되면 중단점 제거를 선택합니다.

단계별 프로그램 실행

Visual Studio Code에서 프로그램을 한 줄씩 단계별로 실행하고 해당 실행을 모니터링할 수도 있습니다. 일반적으로 중단점을 설정하고 프로그램 코드 일부의 프로그램 흐름을 따라가면서 확인할 수 있습니다. 이 프로그램은 작으므로 전체 프로그램을 단계별로 실행할 수 있습니다.

  1. Main 메서드의 여는 중괄호에 중단점을 설정합니다.

  2. F5 키를 눌러 디버깅을 시작합니다.

    Visual Studio Code가 중단점 줄을 강조 표시합니다.

    이 시점에서 변수 창에는 args 배열이 비어 있다고 표시되고, namecurrentDate에는 기본값이 있습니다.

  3. 실행>한 단계씩 코드 실행을 선택하거나 F11을 누릅니다.

    Step-Into button

    Visual Studio Code가 다음 줄을 강조 표시합니다.

  4. 실행>한 단계씩 코드 실행을 선택하거나 F11을 누릅니다.

    Visual Studio Code가 이름 프롬프트에 대해 Console.WriteLine을 실행하고 다음에 실행할 줄을 강조 표시합니다. 다음 줄은 nameConsole.ReadLine입니다. 변수 창은 변경되지 않았으며 터미널 탭에는 "이름이 무엇인가요?" 프롬프트가 표시됩니다.

  5. 실행>한 단계씩 코드 실행을 선택하거나 F11을 누릅니다.

    Visual Studio가 name 변수 할당을 강조 표시합니다. 변수 창에 name이 여전히 null이라고 표시됩니다.

  6. 터미널 탭에 문자열을 입력하고 Enter 키를 눌러 프롬프트에 응답합니다.

    문자열을 입력하는 동안 터미널 탭에 문자열이 표시되지 않을 수 있지만 Console.ReadLine 메서드는 입력을 캡처합니다.

  7. 실행>한 단계씩 코드 실행을 선택하거나 F11을 누릅니다.

    Visual Studio Code가 currentDate 변수 할당을 강조 표시합니다. 변수 창에는 Console.ReadLine 메서드 호출에 의해 반환된 값이 표시됩니다. 터미널 탭에는 프롬프트에 입력한 문자열이 표시됩니다.

  8. 실행>한 단계씩 코드 실행을 선택하거나 F11을 누릅니다.

    변수 창에는 DateTime.Now 속성에 따라 할당된 이후의 currentDate 변수 값이 표시됩니다.

  9. 실행>한 단계씩 코드 실행을 선택하거나 F11을 누릅니다.

    Visual Studio Code가 Console.WriteLine(String, Object, Object) 메서드를 호출합니다. 콘솔 창에는 서식이 지정된 문자열이 표시됩니다.

  10. 실행>프로시저 나가기를 선택하거나 Shift+F11을 누릅니다.

    Step-Out button

  11. 터미널 탭을 선택합니다.

    터미널에 "종료하려면 아무 키나 누르세요..."가 표시됩니다.

  12. 아무 키나 눌러 프로그램을 종료합니다.

릴리스 빌드 구성 사용

애플리케이션의 디버그 버전을 테스트한 후에는 릴리스 버전을 컴파일하고 테스트해야 합니다. 릴리스 버전에는 애플리케이션의 동작에 영향을 줄 수 있는 컴파일러 최적화가 통합됩니다. 예를 들어 성능 향상을 위해 설계된 컴파일러 최적화는 다중 스레드 애플리케이션에서 경합 상태를 만들 수 있습니다.

콘솔 애플리케이션의 릴리스 버전을 빌드하고 테스트하려면 터미널을 열고 다음 명령을 실행합니다.

dotnet run --configuration Release

추가 리소스

다음 단계

이 자습서에서는 Visual Studio Code 디버깅 도구를 사용했습니다. 다음 자습서에서는 앱의 배포 가능 버전을 게시합니다.

이 자습서에서는 .NET 앱 작업을 하는 데 Visual Studio Code에서 사용할 수 있는 디버깅 도구를 소개합니다.

필수 조건

디버그 빌드 구성 사용

디버그릴리스는 .NET의 기본 빌드 구성입니다. 디버그 빌드 구성은 디버깅에 사용하고, 릴리스 구성은 최종 릴리스 배포에 사용합니다.

디버그 구성에서 프로그램은 완전히 기호화된 디버그 정보를 사용하여 컴파일되며 최적화되지 않습니다. 최적화하면 소스 코드와 생성된 명령 간의 관계가 복잡해지므로 디버깅이 복잡해집니다. 프로그램의 릴리스 구성은 완전히 최적화되고, 기호화된 디버그 정보를 포함하지 않습니다.

기본적으로 Visual Studio Code 시작 설정은 디버그 빌드 구성을 사용하므로 디버깅 전에 변경할 필요가 없습니다.

  1. Visual Studio Code 시작

  2. Visual Studio Code를 사용하여 .NET 콘솔 애플리케이션 만들기에서 만든 프로젝트의 폴더를 엽니다.

중단점 설정

중단점은 중단점이 설정된 줄이 실행되기 전에 애플리케이션 실행을 일시적으로 중단합니다.

  1. Program.cs 파일을 엽니다.

  2. 이름, 날짜, 시간을 표시하는 줄에서 코드 창 왼쪽 여백을 클릭하여 ‘중단점’을 설정합니다. 왼쪽 여백은 줄 번호의 왼쪽에 있습니다. F9 키를 누르거나 코드 줄이 선택된 상태로 메뉴에서 실행>중단점 설정/해제를 선택해도 중단점을 설정할 수 있습니다.

    Visual Studio Code에서는 왼쪽 여백에 빨간 점을 표시하여 중단점이 설정된 줄을 표시합니다.

    Breakpoint set

터미널 입력에 대해 설정

중단점은 Console.ReadLine 메서드 호출 뒤에 있습니다. 디버그 콘솔은 실행 중인 프로그램에 대한 터미널 입력을 허용하지 않습니다. 디버깅 중에 터미널 입력을 처리하기 위해 통합 터미널(Visual Studio Code 창 중 하나) 또는 외부 터미널을 사용할 수 있습니다. 이 자습서에서는 통합 터미널을 사용합니다.

  1. 프로젝트 폴더에는 .vscode 폴더가 포함되어 있습니다. .vscode 폴더에 있는 launch.json 파일을 엽니다.

  2. launch.json에서 console 설정을 internalConsole에서 integratedTerminal로 변경합니다.

    "console": "integratedTerminal",
    
  3. 변경 내용을 저장합니다.

디버그 시작

  1. 왼쪽 메뉴에서 디버깅 아이콘을 선택하여 디버그 보기를 엽니다.

    Open the Debug tab in Visual Studio Code

  2. .NET Core 시작(콘솔) 옆에 있는 창 맨 위의 녹색 화살표를 선택합니다. F5 키를 누르거나 메뉴에서 실행>디버깅 시작을 선택해도 디버깅 모드에서 프로그램을 시작할 수 있습니다.

    Start debugging

  3. 터미널 탭을 선택하면 응답을 기다리기 전에 프로그램이 표시하는 "이름이 무엇인가요?"라는 메시지가 표시됩니다.

    Select the Terminal tab

  4. 이름을 묻는 프롬프트에 대한 응답으로 터미널 창에 문자열을 입력하고 Enter 키를 누릅니다.

    중단점에 도달할 때와 Console.WriteLine 메서드가 실행되기 전에 프로그램 실행이 중지됩니다. 변수 창의 지역 섹션에는 현재 실행 중인 메서드에 정의된 변수 값이 표시됩니다.

    Breakpoint hit, showing Locals

디버그 콘솔 사용

디버그 콘솔 창을 통해 디버그하는 애플리케이션과 상호 작용할 수 있습니다. 변수 값을 변경하여 프로그램에 미치는 영향을 확인할 수 있습니다.

  1. 디버그 콘솔 탭을 선택합니다.

  2. 디버그 콘솔 창의 맨 아래에 있는 프롬프트에 name = "Gracie"를 입력하고 Enter 키를 누릅니다.

    Change variable values

  3. 디버그 콘솔 창의 맨 아래에 currentDate = DateTime.Parse("2019-11-16T17:25:00Z").ToUniversalTime()을 입력하고 Enter 키를 누릅니다.

    변수 창에 namecurrentDate 변수의 새 값이 표시됩니다.

  4. 도구 모음에서 계속 단추를 선택하여 프로그램 실행을 계속합니다. F5 키를 눌러도 계속 진행할 수 있습니다.

    Continue debugging

  5. 터미널 탭을 다시 선택합니다.

    콘솔 창에 표시되는 값은 디버그 콘솔에서 변경한 값과 일치합니다.

    Terminal showing the entered values

  6. 아무 키나 눌러 애플리케이션을 종료하고 디버깅을 중지합니다.

조건부 중단점 설정

프로그램은 사용자가 입력하는 문자열을 표시합니다. 사용자가 아무 값도 입력하지 않으면 어떻게 되나요? 조건부 중단점이라는 유용한 디버깅 기능을 사용하여 이를 테스트할 수 있습니다.

  1. 중단점을 나타내는 빨간색 점을 마우스 오른쪽 단추로 클릭합니다(macOS에서는 Ctrl을 누른 채로 클릭). 상황에 맞는 메뉴에서 중단점 편집을 선택하면 조건식을 입력할 수 있는 대화 상자가 열립니다.

    Breakpoint context menu

  2. 드롭다운에서 Expression을 선택하고 다음 조건식을 입력한 후 Enter 키를 누릅니다.

    String.IsNullOrEmpty(name)
    

    Enter a conditional expression

    디버거는 중단점이 적중될 때마다 String.IsNullOrEmpty(name) 메서드를 호출하고, 메서드 호출이 true를 반환하는 경우에만 이 줄에서 중단합니다.

    조건식 대신 문이 지정된 횟수만큼 실행되기 전에 프로그램 실행을 중단하는 적중 횟수를 지정할 수 있습니다. 필터 조건을 지정할 수도 있으며, 이렇게 하면 스레드 식별자, 프로세스 이름 또는 스레드 이름과 같은 특성을 기준으로 프로그램 실행이 중단됩니다.

  3. F5 키를 눌러 디버깅으로 프로그램을 시작합니다.

  4. 터미널 탭에서 이름을 입력하라는 메시지가 나타나면 Enter 키를 누릅니다.

    namenull 또는 String.Empty이라는 지정한 조건이 충족되었으므로 중단점에 도달한 후 Console.WriteLine 메서드가 실행되기 전에 프로그램 실행이 중지됩니다.

    변수 창에 name 변수 값이 "" 또는 String.Empty임이 표시됩니다.

  5. 디버그 콘솔 프롬프트에 다음 문을 입력하고 Enter 키를 눌러 값이 빈 문자열인지 확인합니다. 결과는 true입니다.

    name == String.Empty
    
  6. 도구 모음에서 계속 단추를 선택하여 프로그램 실행을 계속합니다.

  7. 터미널 탭을 선택하고 아무 키나 눌러 프로그램을 종료하고 디버깅을 중지합니다.

  8. 코드 창 왼쪽 여백에 있는 점을 클릭하여 중단점을 지웁니다. F9를 누르거나 코드 줄이 선택된 상태로 메뉴에서 실행 > 중단점 설정/해제를 선택해도 중단점을 지울 수 있습니다.

  9. 중단점 조건이 손실된다는 경고가 표시되면 중단점 제거를 선택합니다.

단계별 프로그램 실행

Visual Studio Code에서 프로그램을 한 줄씩 단계별로 실행하고 해당 실행을 모니터링할 수도 있습니다. 일반적으로 중단점을 설정하고 프로그램 코드 일부의 프로그램 흐름을 따라가면서 확인할 수 있습니다. 이 프로그램은 작으므로 전체 프로그램을 단계별로 실행할 수 있습니다.

  1. Main 메서드의 여는 중괄호에 중단점을 설정합니다.

  2. F5 키를 눌러 디버깅을 시작합니다.

    Visual Studio Code가 중단점 줄을 강조 표시합니다.

    이 시점에서 변수 창에는 args 배열이 비어 있다고 표시되고, namecurrentDate에는 기본값이 있습니다.

  3. 실행>한 단계씩 코드 실행을 선택하거나 F11을 누릅니다.

    Step-Into button

    Visual Studio Code가 다음 줄을 강조 표시합니다.

  4. 실행>한 단계씩 코드 실행을 선택하거나 F11을 누릅니다.

    Visual Studio Code가 이름 프롬프트에 대해 Console.WriteLine을 실행하고 다음에 실행할 줄을 강조 표시합니다. 다음 줄은 nameConsole.ReadLine입니다. 변수 창은 변경되지 않았으며 터미널 탭에는 "이름이 무엇인가요?" 프롬프트가 표시됩니다.

  5. 실행>한 단계씩 코드 실행을 선택하거나 F11을 누릅니다.

    Visual Studio가 name 변수 할당을 강조 표시합니다. 변수 창에 name이 여전히 null이라고 표시됩니다.

  6. 터미널 탭에 문자열을 입력하고 Enter 키를 눌러 프롬프트에 응답합니다.

    문자열을 입력하는 동안 터미널 탭에 문자열이 표시되지 않을 수 있지만 Console.ReadLine 메서드는 입력을 캡처합니다.

  7. 실행>한 단계씩 코드 실행을 선택하거나 F11을 누릅니다.

    Visual Studio Code가 currentDate 변수 할당을 강조 표시합니다. 변수 창에는 Console.ReadLine 메서드 호출에 의해 반환된 값이 표시됩니다. 터미널 탭에는 프롬프트에 입력한 문자열이 표시됩니다.

  8. 실행>한 단계씩 코드 실행을 선택하거나 F11을 누릅니다.

    변수 창에는 DateTime.Now 속성에 따라 할당된 이후의 currentDate 변수 값이 표시됩니다.

  9. 실행>한 단계씩 코드 실행을 선택하거나 F11을 누릅니다.

    Visual Studio Code가 Console.WriteLine(String, Object, Object) 메서드를 호출합니다. 콘솔 창에는 서식이 지정된 문자열이 표시됩니다.

  10. 실행>프로시저 나가기를 선택하거나 Shift+F11을 누릅니다.

    Step-Out button

  11. 터미널 탭을 선택합니다.

    터미널에 "종료하려면 아무 키나 누르세요..."가 표시됩니다.

  12. 아무 키나 눌러 프로그램을 종료합니다.

릴리스 빌드 구성 사용

애플리케이션의 디버그 버전을 테스트한 후에는 릴리스 버전을 컴파일하고 테스트해야 합니다. 릴리스 버전에는 애플리케이션의 동작에 영향을 줄 수 있는 컴파일러 최적화가 통합됩니다. 예를 들어 성능 향상을 위해 설계된 컴파일러 최적화는 다중 스레드 애플리케이션에서 경합 상태를 만들 수 있습니다.

콘솔 애플리케이션의 릴리스 버전을 빌드하고 테스트하려면 터미널을 열고 다음 명령을 실행합니다.

dotnet run --configuration Release

추가 리소스

다음 단계

이 자습서에서는 Visual Studio Code 디버깅 도구를 사용했습니다. 다음 자습서에서는 앱의 배포 가능 버전을 게시합니다.

이 자습서에서는 .NET 앱 작업을 하는 데 Visual Studio Code에서 사용할 수 있는 디버깅 도구를 소개합니다.

필수 조건

디버그 빌드 구성 사용

디버그릴리스는 .NET의 기본 빌드 구성입니다. 디버그 빌드 구성은 디버깅에 사용하고, 릴리스 구성은 최종 릴리스 배포에 사용합니다.

디버그 구성에서 프로그램은 완전히 기호화된 디버그 정보를 사용하여 컴파일되며 최적화되지 않습니다. 최적화하면 소스 코드와 생성된 명령 간의 관계가 복잡해지므로 디버깅이 복잡해집니다. 프로그램의 릴리스 구성은 완전히 최적화되고, 기호화된 디버그 정보를 포함하지 않습니다.

기본적으로 Visual Studio Code 시작 설정은 디버그 빌드 구성을 사용하므로 디버깅 전에 변경할 필요가 없습니다.

  1. Visual Studio Code 시작

  2. Visual Studio Code를 사용하여 .NET 콘솔 애플리케이션 만들기에서 만든 프로젝트의 폴더를 엽니다.

중단점 설정

중단점은 중단점이 설정된 줄이 실행되기 전에 애플리케이션 실행을 일시적으로 중단합니다.

  1. Program.cs 파일을 엽니다.

  2. 이름, 날짜, 시간을 표시하는 줄에서 코드 창 왼쪽 여백을 클릭하여 ‘중단점’을 설정합니다. 왼쪽 여백은 줄 번호의 왼쪽에 있습니다. F9 키를 누르거나 코드 줄이 선택된 상태로 메뉴에서 실행>중단점 설정/해제를 선택해도 중단점을 설정할 수 있습니다.

    Visual Studio Code에서는 왼쪽 여백에 빨간 점을 표시하여 중단점이 설정된 줄을 표시합니다.

    Breakpoint set

터미널 입력에 대해 설정

중단점은 Console.ReadLine 메서드 호출 뒤에 있습니다. 디버그 콘솔은 실행 중인 프로그램에 대한 터미널 입력을 허용하지 않습니다. 디버깅 중에 터미널 입력을 처리하기 위해 통합 터미널(Visual Studio Code 창 중 하나) 또는 외부 터미널을 사용할 수 있습니다. 이 자습서에서는 통합 터미널을 사용합니다.

  1. .vscode/launch.json을 엽니다.

  2. console 설정을 internalConsole에서 integratedTerminal로 변경합니다.

    "console": "integratedTerminal",
    
  3. 변경 내용을 저장합니다.

디버그 시작

  1. 왼쪽 메뉴에서 디버깅 아이콘을 선택하여 디버그 보기를 엽니다.

    Open the Debug tab in Visual Studio Code

  2. .NET Core 시작(콘솔) 옆에 있는 창 맨 위의 녹색 화살표를 선택합니다. F5 키를 누르거나 메뉴에서 실행>디버깅 시작을 선택해도 디버깅 모드에서 프로그램을 시작할 수 있습니다.

    Start debugging

  3. 터미널 탭을 선택하면 응답을 기다리기 전에 프로그램이 표시하는 "이름이 무엇인가요?"라는 메시지가 표시됩니다.

    Select the Terminal tab

  4. 이름을 묻는 프롬프트에 대한 응답으로 터미널 창에 문자열을 입력하고 Enter 키를 누릅니다.

    중단점에 도달할 때와 Console.WriteLine 메서드가 실행되기 전에 프로그램 실행이 중지됩니다. 변수 창의 지역 섹션에는 현재 실행 중인 메서드에 정의된 변수 값이 표시됩니다.

    Breakpoint hit, showing Locals

디버그 콘솔 사용

디버그 콘솔 창을 통해 디버그하는 애플리케이션과 상호 작용할 수 있습니다. 변수 값을 변경하여 프로그램에 미치는 영향을 확인할 수 있습니다.

  1. 디버그 콘솔 탭을 선택합니다.

  2. 디버그 콘솔 창의 맨 아래에 있는 프롬프트에 name = "Gracie"를 입력하고 Enter 키를 누릅니다.

    Change variable values

  3. 디버그 콘솔 창의 맨 아래에 currentDate = DateTime.Parse("2019-11-16T17:25:00Z").ToUniversalTime()을 입력하고 Enter 키를 누릅니다.

    변수 창에 namecurrentDate 변수의 새 값이 표시됩니다.

  4. 도구 모음에서 계속 단추를 선택하여 프로그램 실행을 계속합니다. F5 키를 눌러도 계속 진행할 수 있습니다.

    Continue debugging

  5. 터미널 탭을 다시 선택합니다.

    콘솔 창에 표시되는 값은 디버그 콘솔에서 변경한 값과 일치합니다.

    Terminal showing the entered values

  6. 아무 키나 눌러 애플리케이션을 종료하고 디버깅을 중지합니다.

조건부 중단점 설정

프로그램은 사용자가 입력하는 문자열을 표시합니다. 사용자가 아무 값도 입력하지 않으면 어떻게 되나요? 조건부 중단점이라는 유용한 디버깅 기능을 사용하여 이를 테스트할 수 있습니다.

  1. 중단점을 나타내는 빨간색 점을 마우스 오른쪽 단추로 클릭합니다(macOS에서는 Ctrl을 누른 채로 클릭). 상황에 맞는 메뉴에서 중단점 편집을 선택하면 조건식을 입력할 수 있는 대화 상자가 열립니다.

    Breakpoint context menu

  2. 드롭다운에서 Expression을 선택하고 다음 조건식을 입력한 후 Enter 키를 누릅니다.

    String.IsNullOrEmpty(name)
    

    Enter a conditional expression

    디버거는 중단점이 적중될 때마다 String.IsNullOrEmpty(name) 메서드를 호출하고, 메서드 호출이 true를 반환하는 경우에만 이 줄에서 중단합니다.

    조건식 대신 문이 지정된 횟수만큼 실행되기 전에 프로그램 실행을 중단하는 적중 횟수를 지정할 수 있습니다. 필터 조건을 지정할 수도 있으며, 이렇게 하면 스레드 식별자, 프로세스 이름 또는 스레드 이름과 같은 특성을 기준으로 프로그램 실행이 중단됩니다.

  3. F5 키를 눌러 디버깅으로 프로그램을 시작합니다.

  4. 터미널 탭에서 이름을 입력하라는 메시지가 나타나면 Enter 키를 누릅니다.

    namenull 또는 String.Empty이라는 지정한 조건이 충족되었으므로 중단점에 도달한 후 Console.WriteLine 메서드가 실행되기 전에 프로그램 실행이 중지됩니다.

    변수 창에 name 변수 값이 "" 또는 String.Empty임이 표시됩니다.

  5. 디버그 콘솔 프롬프트에 다음 문을 입력하고 Enter 키를 눌러 값이 빈 문자열인지 확인합니다. 결과는 true입니다.

    name == String.Empty
    
  6. 도구 모음에서 계속 단추를 선택하여 프로그램 실행을 계속합니다.

  7. 터미널 탭을 선택하고 아무 키나 눌러 프로그램을 종료하고 디버깅을 중지합니다.

  8. 코드 창 왼쪽 여백에 있는 점을 클릭하여 중단점을 지웁니다. F9를 누르거나 코드 줄이 선택된 상태로 메뉴에서 실행 > 중단점 설정/해제를 선택해도 중단점을 지울 수 있습니다.

  9. 중단점 조건이 손실된다는 경고가 표시되면 중단점 제거를 선택합니다.

단계별 프로그램 실행

Visual Studio Code에서 프로그램을 한 줄씩 단계별로 실행하고 해당 실행을 모니터링할 수도 있습니다. 일반적으로 중단점을 설정하고 프로그램 코드 일부의 프로그램 흐름을 따라가면서 확인할 수 있습니다. 이 프로그램은 작으므로 전체 프로그램을 단계별로 실행할 수 있습니다.

  1. Main 메서드의 여는 중괄호에 중단점을 설정합니다.

  2. F5 키를 눌러 디버깅을 시작합니다.

    Visual Studio Code가 중단점 줄을 강조 표시합니다.

    이 시점에서 변수 창에는 args 배열이 비어 있다고 표시되고, namecurrentDate에는 기본값이 있습니다.

  3. 실행>한 단계씩 코드 실행을 선택하거나 F11을 누릅니다.

    Step-Into button

    Visual Studio Code가 다음 줄을 강조 표시합니다.

  4. 실행>한 단계씩 코드 실행을 선택하거나 F11을 누릅니다.

    Visual Studio Code가 이름 프롬프트에 대해 Console.WriteLine을 실행하고 다음에 실행할 줄을 강조 표시합니다. 다음 줄은 nameConsole.ReadLine입니다. 변수 창은 변경되지 않았으며 터미널 탭에는 "이름이 무엇인가요?" 프롬프트가 표시됩니다.

  5. 실행>한 단계씩 코드 실행을 선택하거나 F11을 누릅니다.

    Visual Studio가 name 변수 할당을 강조 표시합니다. 변수 창이 지워집니다.

  6. 터미널 탭에 문자열을 입력하고 Enter 키를 눌러 프롬프트에 응답합니다.

    문자열을 입력하는 동안 터미널 탭에 문자열이 표시되지 않을 수 있지만 Console.ReadLine 메서드는 입력을 캡처합니다.

    변수 창에는 Console.ReadLine 메서드 호출에 의해 반환된 값이 표시됩니다.

  7. 실행>한 단계씩 코드 실행을 선택하거나 F11을 누릅니다.

    Visual Studio Code가 currentDate 변수 할당을 강조 표시합니다. 터미널 탭에는 프롬프트에 입력한 문자열이 표시됩니다.

  8. 실행>한 단계씩 코드 실행을 선택하거나 F11을 누릅니다.

    변수 창에는 DateTime.Now 속성에 따라 할당된 이후의 currentDate 변수 값이 표시됩니다.

  9. 실행>한 단계씩 코드 실행을 선택하거나 F11을 누릅니다.

    Visual Studio Code가 Console.WriteLine(String, Object, Object) 메서드를 호출합니다. 콘솔 창에는 서식이 지정된 문자열이 표시됩니다.

  10. 실행>프로시저 나가기를 선택하거나 Shift+F11을 누릅니다.

    Step-Out button

  11. 터미널 탭을 선택합니다.

    터미널에 "종료하려면 아무 키나 누르세요..."가 표시됩니다.

  12. 아무 키나 눌러 프로그램을 종료합니다.

릴리스 빌드 구성 사용

애플리케이션의 디버그 버전을 테스트한 후에는 릴리스 버전을 컴파일하고 테스트해야 합니다. 릴리스 버전에는 애플리케이션의 동작에 영향을 줄 수 있는 컴파일러 최적화가 통합됩니다. 예를 들어 성능 향상을 위해 설계된 컴파일러 최적화는 다중 스레드 애플리케이션에서 경합 상태를 만들 수 있습니다.

콘솔 애플리케이션의 릴리스 버전을 빌드하고 테스트하려면 터미널을 열고 다음 명령을 실행합니다.

dotnet run --configuration Release

추가 리소스

다음 단계

이 자습서에서는 Visual Studio Code 디버깅 도구를 사용했습니다. 다음 자습서에서는 앱의 배포 가능 버전을 게시합니다.