Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu izlenecek yol, GitHub Copilot kullanarak Hilo örnek projesini en son MSVC Derleme Araçları'na yükselterek modernleştirmeyi gösterir. Sorunları tanımlamak ve çözmek için modernleştirme aracısını, ardından bir çalışma zamanı sorununu düzeltmek için Hata Ayıklayıcı aracısını kullanacaksınız.
Hilo Hakkında
Hilo, "modern" C++, XAML ve Windows Çalışma Zamanı kullanarak Windows 8 hedefleyen uygulamalar oluşturmayı göstermek için 2012 yılında Microsoft tarafından geliştirilen örnek bir projeydi. Hilo uygulaması, ek açıklama ve paylaşım özellikleri de içeren bir fotoğraf tarama uygulamasıdır. 2015'te örneği güncelleştirmeyi durdurduk ve bu örneğin kaynak kodunu ve daha önce gönderilen diğer C++ örneklerini VCSamples GitHub deposunda arşivledik.
Modernleştirme zorlukları
Hilo’yu daha yeni bir MSVC Derleme Araçları sürümünü kullanacak şekilde yükselttikten sonra, aracının keşfedip çözdüğü çeşitli sorunlar vardır. Microsoft C++ (MSVC) Derleme Araçları sürüm 14.51 ile derleme sırasında karşılaşılan sorunlar şunlardır.
-
std::tr1::is_base_ofsınıf şablonu birkaç yerde kullanılır, ancakis_base_ofsınıf şablonu tam standardın bir parçası hâline getirildiği içinstd::tr1::is_base_of, artık MSVC'nin C++ standart kitaplığında bulunmamaktadır. Bu bir engelleme hatasıdır. -
ID2D1Factory::GetDesktopDpiİşlev kullanım dışıdır. - Türlerdeki
[uuid(_string_)]ATL özniteliklerinin söz dizimi kullanım dışıdır. - Kurulum Yardımcısı'nın yükseltemediği bir proje var. v120 MSVC Derleme Araçları yüklü değilse (büyük olasılıkla), bu bir engelleme hatasıdır.
- Pencere işleme kodunda, çalışma zamanında bellek erişim istisnasına yol açan bir işaretçi kırpılması vardır.
Yükseltmeyle doğrudan ilgili olmayabilecek, ancak ajanın isteğe bağlı olarak düzeltebileceği birkaç başka uyarı daha vardır. Bu uyarılar şunlardır:
- Çok baytlı karakter dizeleri ve geniş karakter dizeleriyle ilgili daraltma uyarıları.
- Özel derleme adımında çıkış dosyasının adında yazım hatası.
Kurulum
Geliştirme araçlarını yükleme
Bu kılavuzu tamamlamak için C++ için GitHub Copilot modernleştirme aracısının
Depoyu kopyalama
Visual Studio’yu açın ve Başlangıç penceresinden Depoyu klonla seçeneğini belirleyin. Başlangıç Penceresi görünmüyorsa, Dosya>Başlangıç Penceresi aracılığıyla açabilirsiniz.
Depo konumu için şunu girin: https://github.com/microsoft/VCSamples.git. Depoyu kopyalamak için sisteminizde uygun bir yol seçin ve Kopyala düğmesine tıklayın
Yükseltmeyi başlatma
Visual Studio'da Hilo.sln yükleme
Depoyu klonladıktan sonra, <repo-root>/VC2013Samples/Hilo/C++/Hilo.sln konumundaki çözüm dosyasını yükleyin. Bu izlenecek yol için Visual Studio 2013 ile birlikte gönderilen sürümü kullanıyoruz.
Kurulum Yardımcısı'nı kullanarak proje dosyalarını yükseltme
v120 araçları yüklü değilse, Visual Studio eksik bileşenlerle ilgili olarak size yol göstermesi için Kurulum yardımcısı penceresini başlatmanız gerekir. Bu pencereyi gördüğünüzde, Tümünü Yeniden Hedefle'yi seçmeniz ve Uygula'ya tıklamanız gerekir. Pencere görünmüyorsa, Project>Hedef çözümü'e tıklayarak dosya menüsünden açabilirsiniz.
Copilot modernleştirme aracısını başlatın
Kurulum yardımcısı projeyi yeniden hedefledikten sonra, modernleştirme aracısını başlatmak için bir bağlantı içeren bir bilgi çubuğu iletisi almanız gerekir.
Run GitHub Copilot modernization for C++ bağlantısına tıklanması yükseltme işlemini başlatır.
Bilgi çubuğu görünmüyorsa, Çözüm Gezgini içindeki çözüme sağ tıklayıp Modernize seçeneğine tıklayarak aracıyı başlatabilirsiniz. Bu yola giderseniz, I just updated MSVC Build Tools. Resolve any upgrade issues. istemini Copilot Chat göndererek yükseltmeyi başlatabilirsiniz.
Ajanla çalışma
En iyi sonuçları almak için ajanla nasıl etkileşim kurulur
.NET modernleştirme aracısı, C++ aracısı ile aynı temel etkileşim modelini paylaşır. .NET için modernizasyon aracısıyla çalışma belgeleri, genel kalıpları ayrıntılı olarak ele alır. Bu makaledeki örneklerin ve senaryoların .NET özgü olduğunu ve doğrudan C++ için geçerli olmadığını unutmayın.
C++ yükseltmeleri için birkaç ipucu daha aracının iyi performans göstermesine yardımcı olabilir:
- Kapsam hakkında özel olun. Aracıya her şeyi aynı anda güncellemesini söylemek yerine, hangi projelere, kitaplıklara veya tanılamalara odaklanacağını söyleyin. Örneğin: "
NetworkClientprojesindeki C4996 eskime uyarılarını düzeltin." - Ajanın düzeltmesini beklediğiniz tanılama bilgilerini açıklayın. Araç takımı yükseltmesi tarafından sunulan belirli uyarı veya hata kodlarını biliyorsanız aracıya önceden bildirin. Bu ek yönergeler, aracının önceliğini belirlemesine yardımcı olur ve ilgisiz sorunlarda zaman harcanmasını önler.
- C/C++ kod düzenleme araçlarının etkinleştirildiğinden emin olun. Başlamadan önce kurulumunuzda gerekli araçların kullanılabilir olduğunu doğrulayın. Ayrıntılar için bkz. C/C++ kod düzenleme araçları.
- Özel talimatlar kullanarak kodlama kurallarını tanımlayın. Adlandırma kuralları, tercih edilen API'ler veya kaçınılması gereken desenler gibi yönergeleri özel yönergelerde kodlayabilirsiniz. Ajan, yükseltme süresince bu yönergeleri okur ve uygular. Yararlı C++ örnekleri arasında "Türün açık olduğu yeri tercih et
auto" ve "Sıfır Kuralını takip et (veya kaynak sahipliğinin gerektirdiği Üç/Beş Kuralı) gibi kurallar yer alır.
Beklenen davranışlar
Uyarı
LLM tabanlı yapay zeka aracılarının doğası gereği, aracının uyguladığı adımlar ve ürettiği çıkış burada gösterilenden farklı olabilir.
Ön değerlendirme
Aracı ilk olarak kaynak denetim sisteminiz gibi çalıştığı ortamı belirler ve hedefini anlar. Bizim örneğimizde projenizi en son MSVC'yi kullanacak şekilde yükseltmeye çalıştığınızı algılar ve uygun senaryoyu başlatır. Senaryoyla ilgili meta verileri içermek için bir scenario.md dosyası ve bir scenario-instructions.md dosyası oluşturur.
Bu dosyalar aracının Otomatik modda mı yoksa Destekli modda mı çalışması gerektiği, işlemeler yapma stratejisinin ne olduğu ve aracının nasıl ilerlemesi gerektiğini etkileyen diğer bilgiler gibi bilgileri içerir. Daha sonra aracının işlemi sırasında herhangi bir tercihi ifade ederseniz, aracı bu tercihleri dosyaya scenario-instructions.md ekleyebilir.
Assessment
Başlatma işleminden sonra aracı, projenin temiz bir yeniden derlemesini yaparak ve derleme çıkışını hatalar ve uyarılar için inceleyerek projenin değerlendirmesini yapar. Bu bilgileri ve aracının depodan topladığı bağlamı kullanarak, bulduğu sorunları açıklayan ve bunları yükseltme görevi için kapsam içinde veya kapsam dışında olarak kabul edip etmediğini açıklayan bir assessment.md dosya oluşturur.
Aracı Kılavuzlu modunda çalışıyorsa, aracı burada durur ve değerlendirmeyi gözden geçirmenizi ister. Aracıya sorarak veya Markdown dosyasını doğrudan düzenleyerek istediğiniz değişiklikleri yapın ve ardından Planlama aşamasına devam edin. Aracı Otomatik modda çalışıyorsa, aracı otomatik olarak bir sonraki aşamaya devam eder. Bir şeyi değiştirmek istiyorsanız, Copilot sohbet penceresine "Resume" yazarak aracıyı durdurmanız, iptal düğmesine basarak değişiklikleri yapmanız ve aracıyı sürdürmeniz gerekir.
Değerlendirme, kılavuzda daha önce bahsedilen sorunların birkaçını tanımlar. Bazı sorunlar mevcut hatalarla gizlendiğinden daha sonra görüntülenmez. Merak etmeyin, daha sonra keşfedilirler. Aracının, sonradan keşfedilen sorunlar için onayınızı almak üzere duraklamasını istiyorsanız, bu yönergeleri scenario-instructions.md dosyanızda belirtebilirsiniz.
Planning
Aracı Planlama aşamasına başladıktan sonra kapsam içi sorunların daha derin bir analizini yapar ve oluşturulan plan.md bir dosyada olası çözümler önerir. Ayrıca, planı yürütmek için daha yapılandırılmış adımlar ve yönergeler sağlayan bir tasks.md dosya oluşturur.
Değerlendirme'de olduğu gibi aracının ne yaptığı, Kılavuzlu veya Otomatik modda mı çalıştırıldığına bağlıdır. Rehberli modda çalışıyorsa, aracı size sorunları belirli yollarla düzeltmeye veya hatta daha ayrıntılı takas açıklamalarına sahip alternatif seçeneklere sahip olmasını istemeye yönlendirme fırsatı verir. Ayrıca, bazı sorunlar için kodlama kuralları veya özel doğrulama adımları gibi diğer kısıtlamaları belirtebilirsiniz.
Execution
Planı onayladıktan sonra (veya Planlama Otomatik modda tamamlandıktan sonra), aracı Yürütme aşamasına geçer. Burada, önündeki görevleri ele almaya başlar ve yürütme sırasında keşfedilen yeni bilgilere uyum sağlar. Dikkatle gözlemlediğinizde, ajanın önceden gizli kalan sorunları keşfettiğini ve planını buna göre ayarladığını göreceksiniz.
Yürütme aşamasının nihai sonucu, kapsama dahil sorunları çözen bir dizi commit’in deponuza eklenmesi ve artık başarıyla derlenebilen bir projedir. Ancak temiz derleme, projenizi yükseltme adımlarından yalnızca biridir. Ayrıca doğru şekilde çalışması gerekir.
Çalışma zamanı sorunlarını çözmek için Hata Ayıklayıcı aracısını kullanma
Tarayıcıyı Başlatma
Çözüm Gezgini'da Browser projesine sağ tıklayın ve Başlangıç projesi olarak ayarla öğesine tıklayın. Ardından, F5 tuşuna basarak veya dosya menüsünden Debug>Start Debugging seçeneğini belirleyerek Hilo Browser’ın hata ayıklama oturumunu başlatın.
Hata ayıklama oturumu, işlenmeyen bir bellek erişimi özel durumu üzerinde neredeyse hemen kesilmelidir.
Bellek okuma erişimi istisnasını incele
Bu özel durumu analiz etmek ve bir düzeltme uygulamak için Hata Ayıklayıcı aracısını kullanacağız. Hata Ayıklayıcısı aracısını başlatmak için özel durum bilgileri penceresindeki Analyze with Copilot düğmesine tıklayın.
Hata Ayıklayıcı aracısı, çalışma zamanı hatalarının kök nedenini belirlemek için hata ayıklama ve program durumu bilgilerini kullanır ve ardından bir çözüm uygulamak için kaynak kodu analiz eder. Bu durumda araç, geçersiz bellek erişiminin 64 bitlik bir işaretçiyi yalnızca 32 bite indirgeyen uygunsuz bir tür dönüştürme işleminden kaynaklandığını belirler. Bu işaretçi artık geçersiz ve geçersiz bir bellek konumunu gösteriyor; bu da istisnaya neden oluyor. Doğru türü almak için farklı bir yöntem önerir ve kesilmesini önler.
Değişiklikleri uygulama
Önerdiği değişiklikleri kabul edin, Shift + F5* tuşlarına basarak hata ayıklama oturumunu durdurun ve F5 tuşuna basarak yeni bir oturum başlatın. Proje değişiklikle yeniden derlenir ve Visual Studio güncelleştirilmiş uygulamayı başlatır. Şimdi Hilo Browser penceresinin gösterildiğini görmeniz gerekir.
Uygulamayı keşfetmek için zaman harcarsanız, daha fazla çalışma zamanı sorunu keşfedebilirsiniz. Diğer sorunları okuyucuya alıştırma olarak bırakırız. Son hedefinize daha hızlı ulaşmak için yeni aracı araçlarınızı kullanmayı unutmayın.
Summary
Bu kılavuzda, GitHub Copilot aracılarının eski C++ projelerinin modernleştirilmesini nasıl önemli ölçüde hızlandırabileceği gösterilmiştir. Modernleştirme aracısı ve hata ayıklayıcı aracısı, ilk değerlendirmeden çalışma zamanı doğrulamasına kadar yükseltme işlemini kolaylaştırmak için birlikte çalışabilir.
Temel avantajlar
- Otomatik sorun algılama: Aracılar yükseltmelerden kaynaklanan hataya neden olan değişiklikleri, kullanımdan kaldırmaları ve uyumluluk sorunlarını sistematik olarak belirler.
- Akıllı çözümler: Aracılar el ile düzeltmeler yapmak yerine kod bağlamını analiz eder ve kod tabanınıza göre uyarlanmış uygun çözümler önerir.
- Verimlilik: Manuel olarak günler veya haftalar sürebilecek işler, aracının hem derleme hatalarını hem de çalışma zamanı sorunlarını ele almasıyla saatler içinde tamamlanır.
- Kılavuzlu veya otomatik modlar: Konfor düzeyinize ve proje gereksinimlerinize göre uygulamalı rehberlik veya tam otomatik yürütme arasında seçim yapın.
- Öğrenme ve uyarlama: Aracılar ilerledikçe gizli sorunları keşfeder ve yaklaşımlarını buna göre ayarlayarak kapsamlı bir kapsam sağlar.