Visual Studio GitHub Copilot 사용하여 앱 디버그

이 문서에서는 GitHub Copilot 사용하여 보다 효율적으로 디버그하는 방법을 알아봅니다. Copilot 코드 작동 방식에 대한 심층 분석 및 설명과 함께 코드 수정을 제공할 수 있습니다. 버그에 대한 제안된 수정에 도움이 되며 예외와 같은 사항을 설명합니다. Copilot 호출 스택, 프레임, 변수 이름 및 값을 이해합니다. 따라서 디버거 인식 AI와 상호 작용하여 코드와 관련된 자세한 질문을 하고 일반적으로 문제를 디버깅할 수 있습니다.

또한 Copilot 예외와 같은 일부 대상 시나리오 및 디버깅을 위한 AI 강화 시나리오에 설명된 모든 시나리오에 대해 보다 정확한 도움말을 제공합니다. 대부분의 시나리오에서는 Ask CopilotAsk Copilot 버튼의 스크린샷 또는 Analyze with Copilot 버튼을 찾습니다. 이러한 시나리오에서 Copilot 질문의 컨텍스트를 이미 알고 있습니다.

Visual Studio에서 GitHub Copilot 완료에 대한 자세한 내용은 Visual Studio에서 GitHub Copilot 완료 정보를 참조하세요.

필수 구성 요소

시작하려면 다음이 필요합니다.

AI 강화 시나리오

Copilot 호출 스택, 프레임, 변수 이름 및 값을 이해합니다. 따라서 디버거 인식 AI와 상호 작용하여 코드와 관련된 자세한 질문을 하고 일반적으로 문제를 디버깅할 수 있습니다.

또한 Copilot 다음 표에 설명된 것과 같은 일부 대상 시나리오에 대해 보다 정확한 도움말을 제공합니다.

기능 또는 시나리오 링크
디버거 에이전트 이 기사에서 디버거 에이전트를 사용한 에이전틱 버그 해결을 참조하세요. 버그를 재현하고, 앱을 계측하고, 라이브 런타임 데이터를 사용하여 수정 사항의 유효성을 검사하는 엔드 투 엔드 에이전트 워크플로입니다.
호출 스택 분석 Copilot를 사용하여 호출 스택을 분석하기. 비동기 흐름 설명을 포함하여 스레드가 수행하는 작업을 원클릭으로 분석합니다.
예외 이 문서에서 Copilot을 사용한 예외 디버그를 참조하세요. 예외 처리 지원에는 교착 상태 감지 오류에 대한 지원이 포함됩니다.
변수 AI 지원 받기를 참조하세요.
LINQ 쿼리 분석 코드 편집기에서 디버깅하는 동안 LINQ 쿼리를 마우스로 가리키면 반환 값이 표시됩니다. AI 지원을 위해 Copilot 단추를 사용하여 분석합니다. LINQ 쿼리의 반환 값 보기를 참조하세요.
데이터 팁 데이터 팁에 대한 AI 지원 받기를 참조하세요.
조건부 중단점 및 추적점 이 문서에서 조건부 중단점 및 추적점 과 함께 제안을 참조하세요.
빠른 작업(전구) AI 지원을 받으려면 빠른 작업을 참조하세요.
IEnumerable 테이블 형식 뷰어 AI 지원 받기를 참조하세요.
텍스트 시각화 도우미에서 자동 검색 및 서식 지정 자동 검색 및 형식을 참조하세요. 코필로트는 인코딩되거나 압축된 문자열을 자동으로 식별하고 한 번의 클릭으로 디코딩합니다.
인라인 반환 값 메서드 호출반환 값을 참조하세요.
인라인 값 인라인 값 보기를 참조하세요.
다중 스레드 디버깅 스레드 보기에 대한 AI 지원 가져오기를 참조하세요.
단위 테스트 테스트 디버그에 대한 AI 지원 가져오기 참조
리포지토리 컨텍스트를 사용하여 예외 검사 리포지토리 컨텍스트에 대한 AI 지원 가져오기 참조
중단점 문제 해결 AI 지원 받기를 참조하세요.
기능 또는 시나리오 링크
호출 스택 분석 Copilot를 사용하여 호출 스택을 분석하기. 비동기 흐름 설명을 포함하여 스레드가 수행하는 작업을 원클릭으로 분석합니다.
예외 이 문서에서 Copilot을 사용한 예외 디버그를 참조하세요. 예외 처리 지원에는 교착 상태 감지 오류에 대한 지원이 포함됩니다.
변수 AI 지원 받기를 참조하세요.
LINQ 쿼리 분석 코드 편집기에서 디버깅하는 동안 LINQ 쿼리를 마우스로 가리키면 반환 값이 표시됩니다. AI 지원을 위해 Copilot 단추를 사용하여 분석합니다. LINQ 쿼리의 반환 값 보기를 참조하세요.
데이터 팁 데이터 팁에 대한 AI 지원 받기를 참조하세요.
조건부 중단점 및 추적점 이 문서에서 조건부 중단점 및 추적점 과 함께 제안을 참조하세요.
빠른 작업(전구) AI 지원을 받으려면 빠른 작업을 참조하세요.
IEnumerable 테이블 형식 뷰어 AI 지원 받기를 참조하세요.
인라인 반환 값 메서드 호출반환 값을 참조하세요.
인라인 값 인라인 값 보기를 참조하세요.
다중 스레드 디버깅 스레드 보기에 대한 AI 지원 가져오기를 참조하세요.
단위 테스트 테스트 디버그에 대한 AI 지원 가져오기 참조
리포지토리 컨텍스트를 사용하여 예외 검사 리포지토리 컨텍스트에 대한 AI 지원 가져오기 참조
중단점 문제 해결 AI 지원 받기를 참조하세요.

대부분의 이러한 시나리오에서는 Ask CopilotCopilot 실행 버튼입니다. 또는 Analyze with Copilot 버튼을 사용하여 대상 지원을 받습니다. Copilot 질문의 맥락을 이미 알고 있습니다. 예를 들어 현재 호출 스택, 요청하는 코드 줄 및 예외 이름(발생한 경우)을 알고 있으므로 채팅에서 컨텍스트를 직접 제공할 필요가 없습니다. Copilot 조건부 중단점 및 추적점 사용에 대한 제안도 제공합니다.

Copilot 사용하여 디버그

다음 간단한 예제에서는 인라인 채팅 보기를 사용하여 AI 지원을 받는 방법을 보여 줍니다.

메모

View > GitHub Copilot Chat 선택하여 별도의 채팅 창을 사용하여 도움말을 볼 수도 있습니다. 자세한 내용은 Visual Studio GitHub Copilot Chat 확장은 무엇입니까? 참조하세요.

디버깅 세션 시작

  1. Visual Studio 새 C# 콘솔 앱을 만듭니다.

    시작 창에서 새 프로젝트 만들기선택합니다. 검색 상자에 console 입력하고, 언어로 C# 선택한 다음, .NET Console App를 선택합니다. 다음선택합니다. ConsoleApp_Copilot 같은 프로젝트 이름을 입력하고 다음 선택합니다.

    권장 대상 프레임워크 또는 .NET 10을 선택한 다음 Create 선택합니다.

    .NET Console App 프로젝트 템플릿이 표시되지 않으면 Tools>Get 도구 및 기능으로 이동하여 Visual Studio 설치 관리자를 엽니다. .NET 데스크톱 개발 워크로드를 선택한 다음 Modify 선택합니다.

    Visual Studio 오른쪽 창에 Solution Explorer 표시되는 콘솔 프로젝트를 만듭니다.

  2. Program.cs 코드를 다음 코드로 바꿉다.

    using System;
    using System.Collections.Generic;
    
    public class Example
    {
        public static void Main(string[] args)
        {
            int value = Int32.Parse(args[0]);
            List<String> names = null;
            if (value > 0)
                names = new List<String>();
    
            names.Add("Major Major Major");
        }
    }
    
  3. 다음 문장을 오른쪽 클릭하고 중단점>중단점 삽입을 선택합니다.

    int value = Int32.Parse(args[0]);
    
  4. F5 누르거나 디버그 메뉴에서 디버깅 시작 선택합니다.

    앱이 중단점에서 일시 중지됩니다. Autos 창에는 args 변수의 값이 string[0]로 표시되고 있습니다.

    자동 창의 스크린샷

  1. 코드를 마우스 오른쪽 단추로 클릭하고 채팅 을 선택하여 인라인 채팅 보기를 엽니다.
  1. 코드를 마우스 오른쪽 단추로 클릭하고 Ask Copilot 선택하여 인라인 채팅 보기를 엽니다.

또는 자동 또는 로컬 창 또는 데이터 팁에서 변수를 마우스 오른쪽 단추로 클릭하고 Ask Copilot 선택할 수 있습니다. 이렇게 하면 변수 이름 및 컨텍스트를 Copilot 제공하므로 채팅에서 컨텍스트를 직접 제공할 필요가 없습니다.

  1. 인라인 채팅 보기에 다음 질문을 입력합니다.

    Why does the args variable have a value of string[0]?
    

인라인 Copilot Chat의 스크린샷.

Enter 누르면 Copilot 코드에 대한 이해에 따라 답변을 제공합니다. (여기에 표시된 것과 다른 응답을 받을 수 있습니다.)

Copilot에서 답변한 질문의 스크린샷입니다.

Copilot 코드에 대한 권장 수정 사항이 있는 경우 이를 보여 줍니다. 그렇지 않은 경우 Copilot 코드 제안을 요청할 수 있습니다.

인라인 채팅에서 "#" 기호를 사용해 드롭다운 목록에서 선택함으로써, 질문에서 참조할 때 특정 정보를 Copilot에 전달할 수 있습니다. 예를 들어 코드의 일부를 선택한 다음 #을 입력하면 # 드롭다운 목록에서 해당 선택을 선택할 수 있습니다. "#" 기호를 사용하여 로컬 창과 같은 드롭다운 목록에 표시되는 IDE 기능을 참조할 수도 있습니다.

  1. 이 예제에서는 Copilot 답변의 끝까지 스크롤하고 인라인 채팅 창의 끝에 있는 후속 질문을 선택합니다. "인수가 프로그램에 전달되지 않으면 어떻게 처리할 수 있나요?"

    Copilot 후속 질문의 스크린샷.

    Copilot 코드에 대한 제안된 수정 사항을 보여 줍니다.

    Copilot에서 제안한 수정 사항의 스크린샷

    코드 수정을 적용하려면 Tab 키를 선택합니다.

  2. 다음 섹션에서 Copilot 다른 기능을 계속 학습할 수 있도록 Alt+Delete를 선택합니다.

인라인 Copilot Chat의 스크린샷.

Enter 누르면 Copilot 코드에 대한 이해에 따라 답변을 제공합니다. (여기에 표시된 것과 다른 응답을 받을 수 있습니다.)

코파일럿이 답변한 질문의 스크린샷.

Copilot 코드에 대한 권장 수정 사항이 있는 경우 이를 보여 줍니다. 그렇지 않은 경우 Copilot 코드 제안을 요청할 수 있습니다.

인라인 채팅에서 "#" 기호를 사용해 드롭다운 목록에서 선택함으로써, 질문에서 참조할 때 특정 정보를 Copilot에 전달할 수 있습니다. 예를 들어 코드의 일부를 선택한 다음 #을 입력하면 # 드롭다운 목록에서 해당 선택을 선택할 수 있습니다. "#" 기호를 사용하여 로컬 창과 같은 드롭다운 목록에 표시되는 IDE 기능을 참조할 수도 있습니다.

  1. 이 예제에서는 Copilot 답변의 끝까지 스크롤하고 인라인 채팅 창의 끝에 있는 후속 질문을 선택합니다. "인수가 프로그램에 전달되지 않으면 어떻게 처리할 수 있나요?"

    Copilot 후속 질문의 스크린샷.

    Copilot 코드에 대한 제안된 수정 사항을 보여 줍니다.

    Copilot이 제안한 수정 사항의 스크린샷입니다.

    코드 수정을 적용하려면 수락을 선택합니다.

  2. 다음 섹션에서 Copilot 다른 기능을 계속 학습할 수 있도록 Cancel 선택합니다.

Copilot 사용하여 예외 디버그

다음 간단한 예제에서는 예외가 발생할 때 AI 지원을 받는 방법과 AI 제안 수정 사항에 따라 코드를 빠르게 업데이트하는 방법을 보여 줍니다.

디버깅 세션 시작

  • 동일한 샘플 앱을 사용하여 디버거에서 일시 중지된 동안 F11 누르거나 디버그>단계별로 눌러 현재 명령문을 실행합니다.

    IndexOutOfRangeException 발생하고 앱이 일시 중지되어 예외가 표시됩니다.

    예외에 대한 AI 지원을 받으려면 다음 섹션으로 계속 진행합니다.

AI 지원 요청

  1. 예외에서 애플리케이션이 일시 중지된 상태에서 Copilot로 분석 버튼을 선택합니다.

    예외 상황에서 Ask Copilot 단추의 스크린샷

    아직 열려 있지 않으면 Copilot Chat 창이 나타나고 오류 및 발생한 이유에 대한 평가를 제공합니다. 이 예제에서 Copilot은 제안된 코드 수정, 코드를 복사하는 단추, 코드 수정에 대한 Preview 단추를 식별합니다.

    예외에 대한 질문이 있는 경우 Ask Copilot 텍스트 상자에 질문합니다.

    Copilot Chat 창의 미리 보기 버튼 스크린샷입니다.

  2. Copilot 채팅 창에서 Copilot에게 오류를 방지해주기를 원한다고 말하세요.

  3. Copilot 채팅 창에서 수정 사항을 제안하면 Apply 선택합니다.

  4. 제안된 수정 사항을 검토하고 Tab 키를 선택하여 코드 제안을 적용합니다.

    Visual Studio의 코드 미리 보기 스크린샷.

  5. 디버거를 다시 시작합니다.

    이번에는 예외가 발생하지 않습니다. 수정되었습니다!

  1. 예외에서 애플리케이션이 일시 중지된 상태에서 Ask Copilot 단추를 선택합니다.

    예외 상황에서 Ask Copilot 단추의 스크린샷

    아직 열려 있지 않으면 Copilot Chat 창이 나타나고 오류 및 발생한 이유에 대한 평가를 제공합니다. 이 예제에서 Copilot은 제안된 코드 수정, 코드를 복사하는 단추, 코드 수정에 대한 Preview 단추를 식별합니다.

    예외에 대한 질문이 있는 경우 Ask Copilot 텍스트 상자에 질문합니다.

  2. 미리 보기 단추를 선택합니다.

    Copilot Chat 창의 미리 보기 버튼 스크린샷입니다.

    Visual Studio 제안된 수정 사항이 포함된 코드 미리 보기를 표시합니다.

  3. 제안된 수정 사항을 검토하고 수락을 선택하여 코드 제안을 적용합니다.

    Visual Studio의 코드 미리 보기 스크린샷.

  4. 디버거를 다시 시작합니다.

    이번에는 예외가 발생하지 않습니다. 수정되었습니다!

디버거 에이전트를 사용하여 에이전트 버그 확인

디버거 에이전트는 정적 분석에 의존하지 않고 실제 런타임 동작에 대한 버그의 유효성을 검사하는 엔드투엔드 에이전트 워크플로를 제공합니다. 이 환경에서는 문제를 이해하고 재현하고, 애플리케이션을 계측하고, 근본 원인을 격리하고, 라이브 실행을 통해 수정의 유효성을 검사하는 전체 에이전트 루프를 안내합니다.

GitHub 또는 Azure DevOps 문제부터 시작하거나 자연어로 버그를 설명할 수 있습니다. 디버거 에이전트는 문제를 로컬 소스 코드에 매핑하고 해결 방법을 안내합니다. 디버깅 프로세스 중에 에이전트와 상호 작용하여 더 많은 입력을 제공하거나, 이론을 논의하거나, 실시간으로 수정 사항을 구체화할 수 있습니다.

디버거 에이전트를 사용하려면:

  1. Copilot Chat 창을 엽니다(> GitHub Copilot Chat 보기).
  2. 채팅 창의 왼쪽 아래 모서리에 있는 모드 드롭다운에서 디버거 를 선택합니다.
  3. GitHub 또는 Azure DevOps 문제 링크를 제공하거나 자연어로 버그를 설명합니다.

Visual Studio에서 사용자 지정 에이전트가 있는 에이전트 선택기를 보여 주는 스크린샷입니다.

디버거 에이전트는 다음 단계를 수행합니다.

  • 컨텍스트 주입 - 문제 또는 버그 설명을 로컬 소스 코드에 연결합니다.
  • 자율 재현자 - 버그를 분석하고 재현 단계가 누락된 경우 오류를 트리거하는 최소 시나리오를 만듭니다.
  • 가설 및 계측 - 런타임 상태를 캡처하기 위해 추적점 및 조건부 중단점을 사용하여 앱에 오류 가설을 생성하고 계측합니다.
  • 런타임 유효성 검사 - 디버그 세션을 실행하고 라이브 원격 분석을 분석하여 근본 원인을 격리합니다.
  • 대상 수정 - 광범위한 리팩터링이 아닌 정확한 실패 지점에서 정확한 수정을 제안합니다.
  • 최종 사용자 유효성 검사 - 시나리오를 다시 실행하고 에이전트와 함께 라이브 환경에서 수정 사항을 확인합니다.

채팅의 에이전트 모드에서 "@debugger"을 채팅 입력 창에 입력하면 디버거 에이전트로 전환할 수 있습니다. 디버거 에이전트 및 기타 기본 제공 에이전트에 대한 자세한 내용은 GitHub Copilot 참조하세요.

조건부 중단점 및 추적점을 사용하여 제안 가져오기

Copilot은 귀하의 코드에 대한 조건부 중단점tracepoints의 제안을 제공합니다.

이 예제에서는 조건부 중단점에 대한 AI 제안을 보여 줍니다. 추적점의 경우 AI 지원은 동일한 방식으로 작동합니다.

  1. 현재 중단점을 제거하려면 중단점을 클릭하거나 마우스 오른쪽 버튼을 클릭하여 중단점 삭제을 선택하십시오.

  2. 다음 코드 줄을 바꿉다.

    names.Add("Major Major Major");
    

    다음으로:

    // names.Add("Major Major Major");
    foreach (var item in args)
    {
       names.Add("Name: " + item);
    }
    
  3. names.Add("Name: " + item) 문의 왼쪽 코드 영역에서 마우스 오른쪽 버튼 클릭 후 조건부 중단점 삽입 을 선택합니다.

  4. 표현식 필드를 선택하면 Copilot이 제안 사항을 작업하기 시작합니다.

    Copilot이 조건부 중단점 제안에서 작동하는 스크린샷.

  1. 제안이 표시되면 다음과 같이 item == "Test"하나를 선택합니다. 이름을 Fred으로 제안을 편집합니다.

     조건부 중단점에 대한 Copilot 제안 스크린샷.

  1. 제안이 표시되면 item == "John"같은 제안을 선택합니다. 이름을 Fred으로 제안을 편집합니다.

     조건부 중단점에 대한 Copilot 제안 스크린샷.

  1. 조건식을 테스트하려면 다음을 수행합니다.

    1. Solution Explorer ConsoleApp_Copilot 프로젝트를 마우스 오른쪽 단추로 클릭하고 프로퍼티 선택합니다.

    2. 디버그>일반>디버그 실행 프로필 UI 열기선택합니다.

    3. 명령줄 인수 필드에 세 개의 별도 줄에 5 Fred Joe입력합니다.

      프로젝트에 대한 명령줄 인수를 입력하는 스크린샷

    4. 디버거를 다시 시작합니다.

    디버거가 중단점에서 일시 중지되면 item 값을 확인하고 현재 값이 Fred있는지 확인합니다.