Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym przewodniku pokazano, jak używać GitHub Copilot do modernizacji przykładowego projektu Hilo, uaktualniając go do najnowszych narzędzi MSVC Build Tools. Użyjesz agenta modernizacji, aby zidentyfikować i rozwiązać problemy, a następnie użyjesz agenta debugera, aby rozwiązać problem ze środowiskiem uruchomieniowym.
Informacje o Hilo
Hilo to przykładowy projekt opracowany przez Microsoft w 2012 r. w celu zademonstrowania tworzenia aplikacji przeznaczonych dla Windows 8 przy użyciu "nowoczesnego" języka C++, XAML i środowisko wykonawcze systemu Windows. Aplikacja Hilo to aplikacja do przeglądania zdjęć, która zawiera również funkcje adnotacji i udostępniania. Przestaliśmy aktualizować przykład w 2015 r. i zarchiwizować kod źródłowy dla tego przykładu i innych wcześniej dostarczonych przykładów języka C++ w VCSamples GitHub repozytorium.
Wyzwania związane z modernizacją
Istnieje kilka problemów, które agent odnajduje i rozwiązuje po uaktualnieniu Hilo do korzystania z nowszej wersji narzędzi MSVC Build Tools. Poniżej przedstawiono problemy podczas kompilowania przy użyciu narzędzi Microsoft C++ (MSVC) Build Tools w wersji 14.51.
- Szablon
std::tr1::is_base_ofklasy jest używany w kilku miejscach, ale nie jest już dostępny w standardowej bibliotece języka C++ MSVC, ponieważis_base_ofszablon klasy został promowany jako część pełnego standardu. Jest to błąd blokujący. - Funkcja
ID2D1Factory::GetDesktopDpijest przestarzała. - Składnia
[uuid(_string_)]atrybutów ATL dla typów jest przestarzała. - Istnieje projekt, którego Asystent instalacji nie może uaktualnić. Jeśli nie masz zainstalowanych narzędzi kompilacji MSVC w wersji 120 (co jest prawdopodobne), jest to błąd blokujący.
- Istnieje obcinanie wskaźnika w kodzie obsługi okna, który powoduje wyjątek dostępu do pamięci środowiska uruchomieniowego.
Istnieje kilka innych ostrzeżeń, które mogą nie być ściśle związane z uaktualnieniem, ale agent może opcjonalnie naprawić. Te ostrzeżenia obejmują:
- Zawężanie ostrzeżeń dotyczących ciągów znaków wielobajtowych i ciągów znaków szerokich.
- Literówka w nazwie pliku wyjściowego w niestandardowym kroku kompilacji.
Konfiguracja
Instalowanie narzędzi programistycznych
Aby ukończyć ten przewodnik, należy postępować zgodnie z instrukcjami instalacji agenta modernizacji GitHub Copilot dla języka C++.
Klonowanie repozytorium
Otwórz program Visual Studio i w oknie startowym wybierz pozycję Sklonuj repozytorium. Jeśli okno uruchamiania nie zostało wyświetlone, możesz go otworzyć za pomocąokna uruchamiania>.
W polu Lokalizacja repozytorium wprowadź: https://github.com/microsoft/VCSamples.git. Wybierz odpowiednią lokalizację w systemie, do której chcesz sklonować repozytorium, i kliknij przycisk Clone
Rozpoczynanie uaktualniania
Załaduj Hilo.sln w programie Visual Studio
Po sklonowaniu repozytorium otwórz plik rozwiązania znajdujący się pod adresem <repo-root>/VC2013Samples/Hilo/C++/Hilo.sln. Używamy wersji dostarczanej z Visual Studio 2013 w tym przewodniku.
Uaktualnianie plików projektu przy użyciu Asystenta ustawień
Jeśli nie masz zainstalowanych narzędzi v120, program Visual Studio powinien otworzyć okno Asystenta konfiguracji, aby przeprowadzić Cię przez proces rozwiązania problemu z brakującymi składnikami. Gdy zobaczysz to okno, wybierz opcję Zmień cel dla wszystkich i kliknij przycisk Zastosuj. Jeśli okno nie zostanie wyświetlone, możesz otworzyć je z menu pliku, klikając pozycję Project>Retarget solution.
Uruchamianie agenta modernizacji Copilot
Po ponownym utworzeniu projektu przez Asystenta ustawień powinien zostać wyświetlony komunikat paska informacji z linkiem umożliwiającym uruchomienie agenta modernizacji. Kliknięcie linku Run GitHub Copilot modernization for C++ powoduje uruchomienie procesu uaktualniania.
Jeśli pasek informacji nie jest wyświetlany, możesz uruchomić agenta, klikając prawym przyciskiem myszy rozwiązanie w Eksplorator rozwiązań i klikając polecenie Modernize. Jeśli przejdziesz tą trasą, możesz rozpocząć uaktualnianie, wysyłając monit I just updated MSVC Build Tools. Resolve any upgrade issues. do Copilot Chat.
Praca z agentem
Jak korzystać z agenta, aby uzyskać najlepsze wyniki
Agent modernizacji .NET korzysta z tego samego podstawowego modelu interakcji co agent języka C++. Dokumentacja Praca z agentem modernizacji dla platformy .NET szczegółowo opisuje ogólne wzorce. Należy pamiętać, że przykłady i scenariusze w tym artykule są .NET specyficzne i nie mają zastosowania bezpośrednio do języka C++.
W przypadku aktualizacji C++ kilka dodatkowych wskazówek może pomóc agentowi działać skutecznie:
- Określ zakres. Zamiast prosić agenta o uaktualnienie wszystkich elementów jednocześnie, poinformuj go, na których projektach, bibliotekach lub diagnostyki skupić się. Na przykład: "Napraw ostrzeżenia wycofania C4996 w projekcie
NetworkClient". - Opisz diagnostykę, którą agent ma naprawić. Jeśli znasz określone kody ostrzeżeń lub błędów wprowadzone przez uaktualnienie zestawu narzędzi, poinformuj agenta z góry. Te dodatkowe instrukcje pomagają ustalić priorytety agenta i uniknąć poświęcania czasu na niepowiązane problemy.
- Upewnij się, że są włączone narzędzia do edytowania kodu C/C++. Przed rozpoczęciem sprawdź, czy wymagane narzędzia są dostępne w konfiguracji. Aby uzyskać szczegółowe informacje, zobacz C/C++ code editing tools (Narzędzia do edytowania kodu w języku C/C++).
- Określ konwencje kodowania za pomocą niestandardowych instrukcji. Zakoduj wytyczne, takie jak konwencje nazewnictwa, preferowane interfejsy API lub wzorce, których można uniknąć, w instrukcjach niestandardowych. Agent odczytuje i postępuje zgodnie z tymi instrukcjami w trakcie uaktualniania. Przydatne przykłady języka C++ obejmują konwencje, takie jak "Preferuj
auto, gdzie typ jest oczywisty" i "Postępuj zgodnie z regułą zera (lub regułą trzech/pięciu, gdzie wymaga tego własność zasobu)."
Oczekiwane zachowania
Uwaga / Notatka
Ze względu na charakter agentów sztucznej inteligencji opartych na usłudze LLM kroki wykonywane przez agenta i generowane dane wyjściowe mogą różnić się od przedstawionych tutaj elementów.
Wstępna ocena
Agent najpierw określa środowisko, w którym działa, takie jak system kontroli źródła, oraz zrozumienie jego celu. W naszym przypadku program wykrywa, że próbujesz uaktualnić projekt w celu użycia najnowszej wersji MSVC i inicjuje odpowiedni scenariusz. Tworzy plik scenario.md i plik scenario-instructions.md, które zawierają metadane dotyczące scenariusza.
Te pliki zawierają informacje, takie jak to, czy agent powinien działać w trybie automatycznym, czy z przewodnikiem, jaka jest strategia podejmowania zatwierdzeń, oraz inne informacje wpływające na sposób działania agenta. Jeśli wyrazisz jakiekolwiek preferencje później podczas działania agenta, agent może dodać te preferencje do scenario-instructions.md pliku.
Assessment
Po zainicjowaniu agent przeprowadza ocenę projektu, wykonując czystą ponowną kompilację projektu i sprawdzając dane wyjściowe kompilacji pod kątem błędów i ostrzeżeń. Korzystając z tych informacji oraz z kontekstu, który agent zbiera z repozytorium, tworzy plik assessment.md, który opisuje znalezione problemy oraz to, czy uznaje je za mieszczące się w zakresie zadania aktualizacji, czy poza jego zakresem.
Jeśli agent działa w trybie prowadzonym, zatrzymuje się na tym etapie i prosi o sprawdzenie oceny. Wprowadź żądane zmiany, monitując agenta lub edytując plik Markdown bezpośrednio, a następnie przechodząc do etapu Planowania . Jeśli agent działa w trybie Automatyczny, automatycznie przechodzi do następnego etapu. Jeśli chcesz coś zmienić, musisz zatrzymać agenta, naciskając przycisk anuluj, wprowadzić zmiany i wznowić agenta, wpisując monit "Wznów" w oknie czatu Copilot.
Ocena identyfikuje kilka problemów wymienionych wcześniej w przewodniku. Niektóre problemy ujawniają się dopiero później, ponieważ są ukryte z powodu istniejących błędów. Nie martw się, zostaną odkryte później. Jeśli chcesz, aby agent wstrzymał działanie i uzyskał Twoją akceptację w przypadku problemów wykrytych dopiero na późnym etapie, możesz określić takie instrukcje w pliku scenario-instructions.md.
Planning
Gdy agent rozpocznie etap planowania, przeprowadza bardziej szczegółową analizę problemów objętych zakresem i proponuje możliwe rozwiązania w wygenerowanym pliku plan.md. Generuje również plik zawierający bardziej ustrukturyzowane tasks.md kroki i instrukcje dotyczące wykonywania planu.
Podobnie jak w przypadku oceny, to, co robi agent, zależy od tego, czy działa w trybie z przewodnikiem lub automatycznym . Jeśli agent działa w trybie Guided, umożliwia Ci wskazanie mu, jak ma rozwiązać problemy w określony sposób, a nawet poproszenie go o przedstawienie alternatywnych opcji z bardziej szczegółowym opisem związanych z nimi zalet i wad. W przypadku niektórych problemów można również określić inne ograniczenia, takie jak konwencje kodowania lub specjalne kroki weryfikacji.
Execution
Po zatwierdzeniu planu (lub po zakończeniu planowania w trybie automatycznym ) agent przechodzi do etapu Wykonywania. W tym miejscu rozpoczyna obsługę zadań, które ma przed nim, dostosowując się do nowych informacji odnalezionych podczas wykonywania. Dzięki starannej obserwacji zobaczysz, że agent odnajduje wcześniej ukryte problemy i odpowiednio dostosowuje swój plan.
Końcowym rezultatem etapu realizacji jest seria commitów w repozytorium, które rozwiązują problemy objęte zakresem, oraz projekt, który można teraz pomyślnie zbudować. Jednak czysta kompilacja to tylko jeden z kroków uaktualniania projektu. Musi również działać poprawnie.
Rozwiązywanie problemów ze środowiskiem uruchomieniowym przy użyciu agenta debugera
Uruchamianie przeglądarki
W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt Browser, a następnie kliknij pozycję Ustaw jako projekt startowy. Następnie uruchom sesję debugera przeglądarki Hilo, naciskając klawisz F5 lub wybierając pozycję Debuguj>Rozpocznij debugowanie z menu pliku.
Sesja debugowania powinna zostać niemal natychmiast przerwana z powodu nieobsłużonego wyjątku naruszenia dostępu do pamięci.
Sprawdzanie wyjątku dostępu do odczytu pamięci
Użyjemy agenta debugera do przeanalizowania tego wyjątku i zaimplementowania poprawki. W oknie informacji o wyjątku kliknij przycisk Analizuj za pomocą funkcji Copilot, aby uruchomić agenta debugowania.
Agent debugera używa informacji o stanie debugowania i programu, aby określić główną przyczynę błędów środowiska uruchomieniowego, a następnie analizuje kod źródłowy w celu zaimplementowania rozwiązania. W takim przypadku agent identyfikuje, że nieprawidłowy dostęp do pamięci jest spowodowany niewłaściwą operacją rzutowania, która obcinała wskaźnik 64-bitowy tylko do 32 bitów. Ten wskaźnik jest teraz nieprawidłowy i wskazuje nieprawidłową lokalizację pamięci, co powoduje wyjątek. Proponuje inną metodę uzyskania właściwego typu i pozwala uniknąć obcięcia.
Stosowanie zmian
Zaakceptuj sugerowane zmiany, zatrzymaj sesję debugowania, naciskając klawisze Shift + F5*, a następnie uruchamiając nową sesję, naciskając klawisz F5. Projekt zostanie ponownie skompilowany wraz ze zmianą i Visual Studio uruchomi zaktualizowaną aplikację. Powinno zostać wyświetlone okno Przeglądarki Hilo.
Jeśli spędzasz czas na eksplorowaniu aplikacji, możesz wykryć więcej problemów ze środowiskiem uruchomieniowym. Pozostawiamy inne problemy jako ćwiczenia dla czytelnika. Pamiętaj tylko, aby używać swoich nowych narzędzi agentowych, by szybciej osiągnąć swój cel końcowy.
Podsumowanie
W tym przewodniku pokazano, jak agenci GitHub Copilot mogą znacznie przyspieszyć modernizację starszych projektów w języku C++. Agent modernizacji i agent debugera mogą współpracować, aby usprawnić proces uaktualniania od początkowej oceny przez walidację środowiska uruchomieniowego.
Najważniejsze korzyści
- Automatyczne wykrywanie problemów: agenci systematycznie identyfikują niekompatybilne zmiany, wycofania i problemy z kompatybilnością wynikające z aktualizacji.
- Inteligentne rozwiązania: zamiast wymagać ręcznych poprawek, agenci analizują kontekst kodu i proponują odpowiednie rozwiązania dostosowane do bazy kodu.
- Wydajność: To, co mogłoby zająć dni lub tygodnie ręcznej pracy, zostaje wykonane w ciągu kilku godzin, a agent obsługuje zarówno błędy kompilacji, jak i problemy w czasie działania.
- Tryby z przewodnikiem lub automatyczne: wybierz między praktycznymi wskazówkami lub w pełni zautomatyzowanym wykonywaniem na podstawie poziomu komfortu i wymagań projektu.
- Uczenie się i adaptacja: Agenci odkrywają ukryte problemy w miarę postępu i odpowiednio dostosowują swoje podejście, zapewniając kompleksowe pokrycie.