Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Panduan ini menunjukkan cara menggunakan GitHub Copilot untuk memodernisasi proyek sampel Hilo dengan meningkatkannya ke MSVC Build Tools terbaru. Anda akan menggunakan agen modernisasi untuk mengidentifikasi dan mengatasi masalah, lalu menggunakan agen Debugger untuk memperbaiki masalah runtime.
Tentang Hilo
Hilo adalah proyek sampel yang dikembangkan oleh Microsoft pada tahun 2012 untuk menunjukkan pembuatan aplikasi yang menargetkan Windows 8 menggunakan "modern" C++, XAML, dan Windows Runtime. Aplikasi Hilo adalah aplikasi penjelajahan foto yang juga menyertakan fitur anotasi dan berbagi. Kami berhenti memperbarui sampel pada tahun 2015 dan mengarsipkan kode sumber untuk sampel ini dan sampel C++ lain yang dikirim sebelumnya di VCSamples GitHub repositori.
Tantangan modernisasi
Ada beberapa masalah yang ditemukan dan diselesaikan agen setelah memutakhirkan Hilo untuk menggunakan versi MSVC Build Tools yang lebih baru. Berikut adalah masalah saat membangun dengan Microsoft C++ (MSVC) Build Tools versi 14.51.
-
std::tr1::is_base_ofTemplat kelas digunakan di beberapa tempat, tetapi tidak lagi tersedia di pustaka standar C++ MSVC karenais_base_oftemplat kelas dipromosikan menjadi bagian dari standar penuh. Ini adalah kesalahan pemblokiran. - Fungsi
ID2D1Factory::GetDesktopDpiini tidak digunakan lagi. -
[uuid(_string_)]Sintaks untuk atribut ATL pada jenis tidak digunakan lagi. - Ada proyek yang gagal dimutakhirkan oleh Asisten Penyiapan. Jika Anda tidak menginstal Alat Build MSVC v120 (yang kemungkinan besar), ini adalah kesalahan pemblokiran.
- Ada pemotongan pointer dalam kode penanganan jendela yang menyebabkan pengecualian akses memori runtime.
Ada beberapa peringatan lain yang mungkin tidak terkait erat dengan peningkatan, tetapi agen dapat secara opsional memperbaikinya. Peringatan ini meliputi:
- Mempersempit cakupan peringatan terkait string karakter multi-byte dan string karakter lebar.
- Kesalahan ketik dalam nama file keluaran pada langkah build kustom.
Siapkan
Menginstal alat pengembangan
Untuk menyelesaikan panduan ini, Anda perlu mengikuti petunjuk penginstalan untuk agen modernisasi GitHub Copilot untuk C++.
Mengkloning repositori tersebut
Buka Visual Studio dan dari Jendela Mulai pilih Kunci repositori. Jika Jendela Mulai tidak muncul, Anda dapat membukanya melaluiJendela Mulai>.
Untuk lokasi repositori, masukkan: https://github.com/microsoft/VCSamples.git. Pilih jalur yang sesuai pada sistem Anda untuk mengkloning repositori dan klik tombol Kloning
Mulai pembaruan
Memuat Hilo.sln di Visual Studio
Setelah Anda mengkloning repositori, muat file solusi di <repo-root>/VC2013Samples/Hilo/C++/Hilo.sln. Kami menggunakan versi yang dikirim dengan Visual Studio 2013 untuk panduan ini.
Menggunakan Asisten Penyiapan untuk meningkatkan file proyek
Jika Anda tidak menginstal alat v120, Visual Studio harus meluncurkan jendela Asisten penyiapan untuk memandu Anda mengatasi komponen yang hilang. Ketika Anda melihat jendela ini, Anda harus memilih untuk Menargetkan ulang semua dan klik Terapkan. Jika jendela tidak muncul, Anda dapat membukanya dari menu File dengan mengeklik Project>Targetkan ulang solusi.
Luncurkan agen modernisasi Copilot
Setelah Asisten Penyiapan mengalihkan target proyek, Anda akan melihat pesan di infobar dengan tautan untuk memulai agen modernisasi. Mengklik tautan Run GitHub Copilot modernization for C++ memulai proses peningkatan.
Jika bilah info tidak muncul, Anda dapat meluncurkan agen dengan mengklik kanan solusi di Penjelajah Solusi dan mengklik Modernize. Jika Anda masuk ke rute tersebut, Anda dapat memulai peningkatan dengan mengirim perintah I just updated MSVC Build Tools. Resolve any upgrade issues. ke Copilot Chat.
Bekerja dengan agen
Cara berinteraksi dengan agen untuk mendapatkan hasil terbaik
Agen modernisasi .NET berbagi model interaksi yang mendasar yang sama dengan agen C++. Dokumentasi Bekerja dengan agen modernisasi untuk .NET membahas pola-pola umum secara rinci. Perlu diingat bahwa contoh dan skenario dalam artikel tersebut bersifat spesifik .NET dan tidak berlaku langsung ke C++.
Untuk peningkatan C++, beberapa tips lagi dapat membantu agen berkinerja baik:
- Jadilah spesifik tentang cakupan. Daripada meminta agen untuk meningkatkan semuanya sekaligus, beri tahu proyek, pustaka, atau diagnostik mana yang harus difokuskan. Misalnya: "Perbaiki peringatan deprekasi C4996 dalam proyek
NetworkClient." - Jelaskan diagnosis yang Anda harapkan akan diperbaiki agen. Jika Anda mengetahui kode peringatan atau kesalahan tertentu yang diperkenalkan oleh peningkatan set alat, beri tahu agen di muka. Instruksi tambahan ini membantu agen memprioritaskan dan menghindari waktu yang dihabiskan untuk masalah yang tidak terkait.
- Pastikan alat pengeditan kode C/C++ diaktifkan. Verifikasi bahwa alat yang diperlukan tersedia dalam penyiapan Anda sebelum memulai. Untuk detailnya, lihat Alat pengeditan kode C/C++.
- Mengodekan konvensi pengodean menggunakan instruksi kustom. Mengodekan pedoman seperti konvensi penamaan, API pilihan, atau pola yang harus dihindari, dalam instruksi kustom. Agen membaca dan mengikuti instruksi ini selama proses peningkatan. Contoh C++ yang berguna termasuk konvensi seperti "Pilih
autodi mana jenisnya jelas" dan "Ikuti Aturan Nol (atau Aturan Tiga/Lima di mana kepemilikan sumber daya memerlukannya)."
Perilaku yang diharapkan
Note
Karena sifat agen AI berbasis LLM, langkah-langkah yang diambil agen dan output yang dihasilkannya mungkin berbeda dari apa yang ditunjukkan di sini.
Penilaian awal
Agen pertama-tama menentukan lingkungan tempat agen berjalan, seperti sistem kontrol sumber Anda, dan untuk memahami tujuannya. Dalam kasus kami, ini mendeteksi bahwa Anda mencoba meningkatkan proyek Anda untuk menggunakan MSVC terbaru dan menginisialisasi skenario yang sesuai. Ini membuat scenario.md file dan scenario-instructions.md file untuk berisi metadata tentang skenario.
File-file ini berisi informasi seperti apakah agen harus beroperasi dalam mode Otomatis atau Terpandu , strategi untuk melakukan penerapan, dan informasi lain yang memengaruhi bagaimana agen harus melanjutkan. Jika Anda mengekspresikan preferensi apa pun nanti selama pengoperasian agen, agen dapat menambahkan preferensi tersebut ke scenario-instructions.md file.
Assessment
Setelah inisialisasi, agen menilai proyek dengan membangun ulang proyek dari awal dan memeriksa hasil build untuk kesalahan dan peringatan. Dengan menggunakan informasi tersebut serta konteks yang dikumpulkan agen dari repositori, agen tersebut menghasilkan file assessment.md yang menjelaskan isu yang ditemukannya dan apakah isu tersebut dianggap termasuk dalam cakupan atau di luar cakupan untuk tugas upgrade.
Jika agen beroperasi dalam modus Terpandu, agen berhenti di sini dan meminta Anda untuk meninjau penilaian. Buat perubahan yang diinginkan dengan meminta agen atau dengan mengedit file Markdown secara langsung, lalu lanjutkan ke tahap Perencanaan . Jika agen beroperasi dalam mode Otomatis , agen melanjutkan ke tahap berikutnya secara otomatis. Jika Anda ingin mengubah sesuatu, Anda perlu menghentikan agen dengan menekan tombol batalkan, membuat perubahan, dan melanjutkan agen dengan mengetik perintah "Resume" di jendela obrolan Copilot.
Penilaian mengidentifikasi beberapa masalah yang disebutkan sebelumnya dalam panduan. Beberapa masalah tidak muncul sampai nanti karena disembunyikan oleh kesalahan yang ada. Jangan khawatir, mereka ditemukan nanti. Jika Anda ingin agen berhenti sejenak untuk meminta persetujuan Anda atas masalah yang baru ditemukan belakangan, Anda dapat menentukan instruksi tersebut dalam file scenario-instructions.md Anda.
Planning
Setelah agen memulai tahap Perencanaan, agen melakukan analisis yang lebih mendalam tentang masalah dalam cakupan dan mengusulkan kemungkinan solusi dalam file yang dihasilkan plan.md . Ini juga menghasilkan tasks.md file yang menyediakan langkah-langkah dan instruksi yang lebih terstruktur untuk menjalankan rencana.
Seperti penilaian, apa yang dilakukan agen tergantung pada apakah itu beroperasi dalam mode Terpandu atau Otomatis . Jika dijalankan dalam mode Terpandu, agen memberi Anda kesempatan untuk mengarahkannya agar memperbaiki masalah dengan cara tertentu atau bahkan memintanya memberikan opsi alternatif beserta penjelasan yang lebih terperinci tentang kelebihan dan kekurangannya. Anda juga dapat menentukan batasan lain seperti konvensi pengkodian atau langkah-langkah validasi khusus untuk beberapa masalah.
Eksekusi
Setelah Anda menyetujui rencana (atau setelah Perencanaan selesai dalam mode Otomatis ), agen berpindah ke tahap Eksekusi. Pada tahap ini, sistem mulai menangani tugas yang dihadapinya, menyesuaikan diri dengan informasi baru yang ditemukan saat dijalankan. Dengan pengamatan yang cermat, Anda akan melihat bahwa agen menemukan masalah yang sebelumnya tersembunyi dan menyesuaikan rencananya.
Hasil akhir dari tahap Eksekusi adalah serangkaian commit ke repositori Anda yang menyelesaikan masalah yang termasuk dalam cakupan, serta sebuah proyek yang kini berhasil dibangun. Namun, kompilasi yang bersih hanyalah salah satu langkah untuk meningkatkan proyek Anda. Ini juga perlu berfungsi dengan benar.
Gunakan agen Debugger untuk mengatasi masalah saat proses berjalan
Luncurkan Browser
Di Penjelajah Solusi, klik kanan proyek Browser dan klik Setel sebagai proyek startup. Kemudian luncurkan sesi debugger Browser Hilo dengan menekan F5 atau memilih Debug>Mulai Debugging dari menu file.
Sesi debugging seharusnya hampir seketika berhenti pada pengecualian akses memori yang tidak tertangani.
Periksa pengecualian pada akses baca memori
Kita akan menggunakan agen Debugger untuk menganalisis pengecualian ini dan menerapkan perbaikan. Klik tombol Analyze dengan Copilot pada jendela informasi pengecualian untuk meluncurkan agen Debugger.
Agen Debugger menggunakan debug dan informasi status program untuk menentukan akar penyebab kesalahan runtime lalu menganalisis kode sumber untuk mengimplementasikan solusi. Dalam hal ini, agen mengidentifikasi bahwa akses memori yang tidak valid disebabkan oleh operasi pemeran yang tidak tepat yang memotong pointer 64-bit menjadi hanya 32 bit. Penunjuk itu sekarang tidak valid dan menunjuk pada lokasi memori yang tidak valid, yang menyebabkan pengecualian. Metode ini menawarkan cara berbeda untuk mendapatkan tipe yang tepat dan menghindari pemangkasan.
Terapkan perubahan
Terima perubahan yang disarankan, hentikan sesi penelusuran kesalahan dengan menekan Shift + F5*, lalu mulai sesi baru dengan menekan F5. Proyek ini dikompresi ulang dengan perubahan dan Visual Studio meluncurkan aplikasi yang diperbarui. Sekarang Anda akan melihat jendela Browser Hilo muncul.
Jika Anda menghabiskan waktu menjelajahi aplikasi, Anda mungkin menemukan lebih banyak masalah runtime. Kami meninggalkan masalah lain sebagai latihan untuk pembaca. Ingatlah untuk menggunakan alat agenik baru Anda untuk sampai ke tujuan akhir Anda lebih cepat.
RINGKASAN
Panduan ini menunjukkan bagaimana agen GitHub Copilot dapat secara signifikan mempercepat modernisasi proyek C++ yang lebih lama. Agen modernisasi dan agen debugger dapat bekerja sama untuk menyederhanakan proses peningkatan dari penilaian awal melalui validasi runtime.
Manfaat utama
- Deteksi masalah secara otomatis: Agen secara sistematis mengidentifikasi perubahan besar yang menyebabkan ketidakcocokan, deprekasi, dan masalah kompatibilitas yang timbul akibat pemutakhiran.
- Solusi cerdas: Daripada memerlukan perbaikan manual, agen menganalisis konteks kode dan mengusulkan solusi yang sesuai yang disesuaikan dengan basis kode Anda.
- Efisiensi: Apa yang mungkin memakan waktu berjam-hari atau minggu pekerjaan manual diselesaikan dalam hitungan jam, dengan agen menangani kesalahan build dan masalah runtime.
- Mode terpandu atau otomatis: Pilih antara panduan langsung atau eksekusi otomatis sepenuhnya berdasarkan tingkat kenyamanan dan persyaratan proyek Anda.
- Pembelajaran dan adaptasi: Agen menemukan masalah tersembunyi saat mereka maju dan menyesuaikan pendekatan mereka dengan sesuai, memastikan cakupan komprehensif.