이 연습에서는 GitHub Copilot 사용하여 최신 MSVC 빌드 도구로 업그레이드하여 Hilo 샘플 프로젝트를 현대화하는 방법을 보여 줍니다. 현대화 에이전트를 사용하여 문제를 식별하고 해결한 다음 디버거 에이전트를 사용하여 런타임 문제를 해결합니다.
힐로 정보
Hilo는 "최신" C++, XAML 및 Windows 런타임 사용하여 Windows 8 대상으로 하는 애플리케이션을 만드는 방법을 보여주기 위해 Microsoft 2012년에 개발한 샘플 프로젝트입니다. Hilo 애플리케이션은 주석 및 공유 기능도 포함하는 사진 검색 애플리케이션입니다. 2015년에 샘플 업데이트를 중지하고 이 샘플의 소스 코드와 이전에 제공된 다른 C++ 샘플을 VCSamples GitHub 리포지토리 보관했습니다.
현대화 과제
최신 MSVC 빌드 도구 버전을 사용하도록 Hilo를 업그레이드한 후 에이전트가 검색하고 해결하는 몇 가지 문제가 있습니다. 다음은 MSVC(Microsoft C++) 빌드 도구 버전 14.51을 사용하여 빌드할 때 발생하는 문제입니다.
-
std::tr1::is_base_of클래스 템플릿은 여러 위치에서 사용되지만 클래스 템플릿이 전체 표준의 일부로 승격되었으므로 MSVC의 C++ 표준 라이브러리is_base_of에서 더 이상 사용할 수 없습니다. 차단 오류입니다. - 함수는
ID2D1Factory::GetDesktopDpi더 이상 사용되지 않습니다. -
[uuid(_string_)]형식의 ATL 특성에 대한 구문은 더 이상 사용되지 않습니다. - 설치 도우미를 업그레이드하지 못하는 프로젝트가 있습니다. v120 MSVC 빌드 도구가 설치되어 있지 않은 경우(가능한 경우) 차단 오류입니다.
- 런타임 메모리 액세스 예외를 일으키는 창 처리 코드에 포인터 잘림이 있습니다.
업그레이드와 엄격하게 관련이 없지만 에이전트가 선택적으로 수정할 수 있는 몇 가지 다른 경고가 있습니다. 이러한 경고는 다음과 같습니다.
- 멀티 바이트 문자열 및 와이드 문자열에 대한 경고 축소
- 사용자 지정 빌드 단계의 출력 파일 이름에 있는 오타입니다.
설치
개발 도구 설치
이 연습 과정을 완료하려면 C++용 GitHub Copilot 현대화 에이전트의 설치 지침을 따라야 합니다.
리포지토리 복제
Visual Studio 열고 시작 창에서 리포지토리 포함 선택합니다. 시작 창이 나타나지 않으면 파일>시작 창을 통해 열 수 있습니다.
리포지토리 위치의 경우 다음 https://github.com/microsoft/VCSamples.git을 입력합니다. 리포지토리를 복제할 시스템에서 적절한 경로를 선택하고 복제 단추를 클릭합니다.
업그레이드 시작
Visual Studio에서 Hilo.sln을 로드합니다
리포지토리를 복제한 후 솔루션 파일을 로드합니다 <repo-root>/VC2013Samples/Hilo/C++/Hilo.sln. 이 연습에서는 Visual Studio 2013과 함께 제공되는 버전을 사용하고 있습니다.
설치 도우미를 사용하여 프로젝트 파일 업그레이드
v120 도구가 설치되어 있지 않은 경우 Visual Studio 설치 도우미 창을 시작하여 누락된 구성 요소를 처리하는 방법을 안내해야 합니다. 이 창이 표시되면 모두 대상을 변경 하도록 선택하고 적용을 클릭해야 합니다. 창이 표시되지 않으면 파일 메뉴에서 Project>리타겟 솔루션을 클릭하여 열 수 있습니다.
Copilot 현대화 에이전트 실행
설치 도우미에서 프로젝트 대상을 다시 지정한 후에는 현대화 에이전트를 시작하는 링크가 포함된 정보 표시줄 메시지를 받아야 합니다.
Run GitHub Copilot modernization for C++ 링크를 클릭하면 업그레이드 프로세스가 시작됩니다.
정보 표시줄이 표시되지 않으면 솔루션 탐색기 솔루션을 마우스 오른쪽 단추로 클릭하고 모더니즈 클릭하여 에이전트를 시작할 수 있습니다. 해당 경로를 이동하는 경우 프롬프트 I just updated MSVC Build Tools. Resolve any upgrade issues.을 Copilot Chat 전송하여 업그레이드를 시작할 수 있습니다.
에이전트와 함께 작업하다
에이전트와 상호 작용하여 최상의 결과를 얻는 방법
.NET 현대화 에이전트는 C++ 에이전트와 동일한 기본 상호 작용 모델을 공유합니다. .NET용 현대화 에이전트 작업 문서에서는 일반적인 패턴을 자세히 다룹니다. 해당 문서의 예제 및 시나리오는 .NET 관련되며 C++에 직접 적용되지 않습니다.
C++ 업그레이드의 경우 에이전트가 잘 수행하는 데 도움이 되는 몇 가지 추가 팁이 있습니다.
- 범위에 대해 구체적으로 설명합니다. 에이전트에 모든 항목을 한 번에 업그레이드하도록 요청하는 대신 어떤 프로젝트, 라이브러리 또는 진단에 집중할지 알려주세요. 예: "프로젝트에서 C4996 사용 중단 경고
NetworkClient수정." - 에이전트가 수정할 것으로 예상되는 진단에 대해 설명합니다. 도구 집합 업그레이드에서 도입된 특정 경고 또는 오류 코드를 알고 있는 경우 에이전트에 미리 알려주세요. 이러한 추가 지침은 에이전트의 우선 순위를 지정하는 데 도움이 되며 관련 없는 문제에 소요되는 시간을 방지합니다.
- C/C++ 코드 편집 도구가 사용하도록 설정되어 있는지 확인합니다. 시작하기 전에 설치 프로그램에서 필요한 도구를 사용할 수 있는지 확인합니다. 자세한 내용은 C/C++ 코드 편집 도구를 참조하세요.
- 사용자 지정 지침을 사용하여 코딩 규칙을 인코딩합니다.
사용자 지정 지침에서 방지할 명명 규칙, 기본 API 또는 패턴과 같은 지침을 인코딩합니다. 에이전트는 업그레이드 전체에서 이러한 지침을 읽고 따릅니다. 유용한 C++ 예시로는 "타입이 분명한 경우
auto를 선호하라" 및 "제로의 규칙(또는 리소스 소유권을 관리해야 하는 경우 3의 규칙/5의 규칙을 따르라)"와 같은 관례가 있습니다.
예상 동작
비고
LLM 기반 AI 에이전트의 특성으로 인해 에이전트가 수행하는 단계와 생성하는 출력이 여기에 표시된 것과 다를 수 있습니다.
사전 평가
에이전트는 먼저 소스 제어 시스템과 같이 실행 중인 환경을 결정하고 해당 목표를 이해합니다. 이 경우 최신 MSVC를 사용하도록 프로젝트를 업그레이드하려는 것을 감지하고 적절한 시나리오를 초기화합니다. 시나리오에 대한 메타데이터를 포함하는 scenario.md 파일과 scenario-instructions.md 파일을 만듭니다.
이러한 파일에는 에이전트가 자동 또는 안내 모드에서 작동해야 하는지 여부, 커밋을 위한 전략 및 에이전트 진행 방식에 영향을 주는 기타 정보와 같은 정보가 포함됩니다. 에이전트를 작업하는 동안 나중에 기본 설정을 표현하는 경우 에이전트는 해당 기본 설정을 scenario-instructions.md 파일에 추가할 수 있습니다.
Assessment
초기화 후 에이전트는 프로젝트를 새로 다시 빌드하고 빌드 출력에서 오류 및 경고를 검사하여 프로젝트 평가를 수행합니다. 에이전트는 해당 정보 및 리포지토리에서 수집하는 컨텍스트를 사용하여 발견된 문제와 업그레이드 작업의 범위 내 또는 범위를 벗어난 것으로 간주하는지 여부를 설명하는 파일을 생성 assessment.md 합니다.
에이전트가 안내 모드에서 작동하는 경우 에이전트는 여기에서 중지하고 평가 검토를 요청합니다. 에이전트에 메시지를 표시하거나 Markdown 파일을 직접 편집하여 원하는 내용을 변경한 다음 계획 단계로 계속 진행합니다. 에이전트가 자동 모드에서 작동하는 경우 에이전트는 자동으로 다음 단계로 계속 진행됩니다. 항목을 변경하려면 취소 단추를 눌러 에이전트를 중지하고, 변경한 다음, Copilot 채팅 창에 프롬프트 "다시 시작"을 입력하여 에이전트를 다시 시작해야 합니다.
평가는 연습의 앞부분에서 언급한 몇 가지 문제를 식별합니다. 일부 문제는 기존 오류로 인해 숨겨져 있기 때문에 나중에 나타나지 않습니다. 걱정하지 마세요. 나중에 검색됩니다. 에이전트가 뒤늦게 발견된 문제에 대해 승인을 받기 위해 일시 중지하도록 하려면, scenario-instructions.md 파일에 해당 지침을 지정할 수 있습니다.
Planning
에이전트가 계획 단계를 시작하면 범위 내 문제에 대한 심층 분석을 수행하고 생성된 plan.md 파일에서 가능한 솔루션을 제안합니다. 또한 계획을 실행하기 위한 보다 구조화된 단계와 지침을 제공하는 파일을 생성 tasks.md 합니다.
평가와 마찬가지로 에이전트가 수행하는 동작은 안내 모드 또는 자동 모드에서 작동하는 경우에 따라 달라집니다. 안내 모드에서 실행되는 경우 에이전트는 특정 방식으로 문제를 해결하도록 지시하거나 장만에 대한 자세한 설명이 포함된 대체 옵션을 제공하도록 요청할 수 있는 기회를 제공합니다. 일부 문제에 대한 코딩 규칙 또는 특수 유효성 검사 단계와 같은 다른 제약 조건을 지정할 수도 있습니다.
실행
계획을 승인하거나 자동 모드에서 계획이 완료되면 에이전트가 실행 단계로 이동합니다. 여기서는 실행 중 검색된 새 정보에 적응하여 앞에 있는 작업을 처리하기 시작합니다. 주의 깊게 관찰하면 에이전트가 이전에 숨겨진 문제를 검색하고 그에 따라 계획을 조정하는 것을 볼 수 있습니다.
실행 단계의 최종 결과는 범위 내 문제를 해결하는 리포지토리에 대한 일련의 커밋 및 이제 성공적으로 빌드할 수 있는 프로젝트입니다. 그러나 정리된 컴파일은 프로젝트를 업그레이드하는 단계 중 하나일 뿐입니다. 또한 올바르게 실행해야 합니다.
디버거 에이전트를 사용하여 런타임 문제 해결
브라우저 시작
솔루션 탐색기Browser 프로젝트를 마우스 오른쪽 단추로 클릭하고 시작 프로젝트로 설정 클릭합니다. 그런 다음 F5 키를 누르거나 파일 메뉴에서 디버그>시작 디버깅 을 선택하여 Hilo Browser의 디버거 세션을 시작합니다.
디버깅 세션은 처리되지 않은 메모리 액세스 예외에서 거의 즉시 중단되어야 합니다.
메모리 읽기 액세스 예외 검사
디버거 에이전트를 사용하여 이 예외를 분석하고 수정 사항을 구현합니다. 예외 정보 창에서 Copilot 단추를 클릭하여 디버거 에이전트를 시작합니다.
디버거 에이전트는 디버그 및 프로그램 상태 정보를 사용하여 런타임 오류의 근본 원인을 확인한 다음 소스 코드를 분석하여 솔루션을 구현합니다. 이 경우 에이전트는 잘못된 메모리 액세스가 64비트 포인터를 32비트로 잘린 부적절한 캐스트 작업 때문임을 식별합니다. 이제 해당 포인터가 유효하지 않으며 잘못된 메모리 위치를 가리키며 이로 인해 예외가 발생합니다. 올바른 형식을 가져오는 다른 방법을 제안하고 잘림을 방지합니다.
변경 내용 적용
제안된 변경 내용을 적용하고 Shift + F5*를 눌러 디버깅 세션을 중지한 다음 F5 키를 눌러 새 세션을 시작합니다. 프로젝트는 변경 내용과 함께 다시 컴파일되고 업데이트된 애플리케이션을 Visual Studio 시작합니다. 이제 Hilo 브라우저 창이 표시됩니다.
애플리케이션을 탐색하는 데 시간이 걸리는 경우 더 많은 런타임 문제를 발견할 수 있습니다. 다른 문제는 독자를 위한 연습으로 남겨 둡니다. 새 에이전트 도구를 사용하여 최종 목표를 더 빠르게 달성해야 합니다.
Summary
이 연습에서는 GitHub Copilot 에이전트가 이전 C++ 프로젝트의 현대화를 크게 가속화하는 방법을 보여 줍니다. 현대화 에이전트와 디버거 에이전트는 함께 작동하여 런타임 유효성 검사를 통해 초기 평가에서 업그레이드 프로세스를 간소화할 수 있습니다.
주요 이점
- 자동화된 문제 검색: 에이전트는 업그레이드에서 발생하는 호환성 문제, 중단 및 호환성 문제를 체계적으로 식별합니다.
- 지능형 솔루션: 에이전트는 수동 수정을 요구하는 대신 코드 컨텍스트를 분석하고 코드베이스에 맞는 적절한 솔루션을 제안합니다.
- 효율성: 에이전트가 빌드 오류 및 런타임 문제를 모두 처리하여 며칠 또는 몇 주가 걸릴 수 있는 수동 작업이 몇 시간 안에 완료됩니다.
- 단계별 또는 자동 모드: 편안함 수준 및 프로젝트 요구 사항에 따라 실습 지침 또는 완전히 자동화된 실행 중에서 선택합니다.
- 학습 및 적응: 에이전트는 진행하면서 숨겨진 문제를 발견하고 그에 따라 접근 방식을 조정하여 포괄적인 범위를 보장합니다.