Panduan: Meningkatkan Microsoft C++ (MSVC) Build Tools untuk proyek sampel Hilo

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.

Cuplikan layar jendela aplikasi Hilo utama memperlihatkan konten folder Gambar pengguna.

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_of Templat kelas digunakan di beberapa tempat, tetapi tidak lagi tersedia di pustaka standar C++ MSVC karena is_base_of templat kelas dipromosikan menjadi bagian dari standar penuh. Ini adalah kesalahan pemblokiran.
  • Fungsi ID2D1Factory::GetDesktopDpi ini 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>.

Screenshot dari Jendela Mulai Visual Studio dengan tautan Kloning repositori disorot.

Untuk lokasi repositori, masukkan: https://github.com/microsoft/VCSamples.git. Pilih jalur yang sesuai pada sistem Anda untuk mengkloning repositori dan klik tombol Kloning

Cuplikan layar jendela

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.

Cuplikan layar jendela Asisten penyiapan memperlihatkan proyek Hilo. Semua dipilih untuk penargetan ulang dan tombol Terapkan disorot.

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.

Cuplikan layar pesan pada bilah info di Visual Studio untuk meluncurkan agen modernisasi.

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 auto di 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.

Cuplikan layar konten file scenario-instructions.md.

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.

Cuplikan layar konten file assessment.md yang dirender.

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.

Cuplikan layar konten file plan.md yang dirender.

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.

Cuplikan layar agen di tengah tahap Eksekusi, bereaksi terhadap masalah yang baru ditemukan.

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.

Cuplikan layar pengecualian akses baca memori saat pertama kali meluncurkan browser Hilo.

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.

Cuplikan layar jendela pengecualian pada peramban Hilo dengan tombol Analisis dengan Copilot yang disorot.

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.

Cuplikan layar jendela aplikasi Hilo utama memperlihatkan konten folder Gambar pengguna.

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.