İzlenecek yol: Hilo örnek projesi için Microsoft C++ (MSVC) Derleme Araçları'nı yükseltme

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.

Kullanıcının Resimler klasörünün içeriğini gösteren ana Hilo uygulama penceresinin ekran görüntüsü.

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_of sınıf şablonu birkaç yerde kullanılır, ancak is_base_of sınıf şablonu tam standardın bir parçası hâline getirildiği için std::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 yükleme yönergelerini izlemeniz gerekir.

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.

Visual Studio Başlangıç Penceresi'nde, Depoyu klonla bağlantısının vurgulandığı ekran görüntüsü.

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

 Gerekli alanların tamamlandığı ve Kopyala düğmesinin vurgulandığı Depoyu kopyalama penceresinin Visual Studio ekran görüntüsü.

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.

Hilo projelerini gösteren Kurulum yardımcısı penceresinin ekran görüntüsü. Tümü yeniden hedefleme için seçilir ve Uygula düğmesi vurgulanır.

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.

Modernleştirme aracısını başlatmak için Visual Studio'daki bilgi çubuğu iletisinin ekran görüntüsü.

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: "NetworkClient projesindeki 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 etauto" 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.

scenario-instructions.md dosyasının içeriğinin ekran görüntüsü.

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.

Bir assessment.md dosyasının oluşturulan içeriğinin ekran görüntüsü.

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.

plan.md dosyasının işlenmiş içeriğinin ekran görüntüsü.

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 ortasında, yeni keşfedilen sorunlara tepki veren aracının ekran görüntüsü.

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.

Hilo tarayıcısını ilk kez başlatırken bellek okuma erişimi özel durumunun ekran görüntüsü.

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.

 Hilo tarayıcısı için özel durum penceresinin ekran görüntüsü ve Copilot çözümle düğmesi vurgulanmış.

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.

Kullanıcının Resimler klasörünün içeriğini gösteren ana Hilo uygulama penceresinin ekran görüntüsü.

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.