Desteklenen Kod Değişiklikleri (C++)

C++ projeleri için Düzenle ve Devam Et, çoğu kod değişikliği türünü işler. Ancak, program yürütme sırasında bazı değişiklikler uygulanamaz. Bu değişiklikleri uygulamak için yürütmeyi durdurmanız ve kodun yeni bir sürümünü oluşturmanız gerekir.

Visual Studio'da C++ için Düzenle ve Devam Et ile çalışma hakkında bilgi için bkz. Düzenle ve Devam Et (C++).

Gereksinimler

Derleme ayarları (Proje > Özellikleri):

  1. C/C++ > Genel > Hata Ayıklama Bilgileri Biçimi: Düzenleme ve Devam Için Program Veritabanı (/ZI)

  2. Bağlayıcı > Genel Artımlı Bağlamayı Etkinleştir: Evet (/INCREMENTAL>)

    Uyumsuz bağlayıcı ayarları (, /SAFESEHveya /OPT:...) derleme sırasında uyarı LNK4075 neden olmalıdır.
    Örnek: LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:ICF' specification

Hata ayıklayıcısı ayarları (Hata Ayıklama > Seçenekleri > Genel):

  • Yerel Düzenlemeyi Etkinleştir ve Devam Et

    Uyumlu olmayan derleyici veya bağlayıcı ayarları, Düzenle ve Devam Et sırasında hataya neden olur.
    Örnek: Edit and Continue : error : ‘file.cpp’ in ‘MyApp.exe’ was not compiled with Edit and Continue enabled. Ensure that the file is compiled with the Program Database for Edit and Continue (/ZI) option.

Desteklenmeyen değişiklikler

Hata ayıklama oturumu sırasında aşağıdaki C/C++ değişiklikleri uygulanamaz. Bu değişikliklerden herhangi birini yapıp kod değişikliklerini uygulamayı denerseniz, Çıkış penceresinde bir hata veya uyarı iletisi görüntülenir.

  • Genel veya statik verilerde yapılan çoğu değişiklik.

  • Başka bir makineden kopyalanan ve yerel olarak oluşturulmayan yürütülebilir dosyalarda yapılan değişiklikler.

  • Bir sınıfın veri üyeleri gibi bir nesnenin düzenini etkileyen veri türünde yapılan değişiklikler.

  • 64k bayttan fazla yeni kod veya veri ekleme.

  • Yönerge işaretçisinin önüne bir noktada oluşturucu gerektiren değişkenler ekleme.

  • Çalışma zamanı başlatma gerektiren kodu etkileyen değişiklikler.

  • Bazı durumlarda özel durum işleyicileri ekleme.

  • Kaynak dosyalarındaki değişiklikler.

  • Salt okunur dosyalarda kodda yapılan değişiklikler.

  • İlgili PDB dosyası olmadan kodda yapılan değişiklikler.

  • Nesne dosyası olmayan kodda yapılan değişiklikler.

  • Lambdaları değiştirme:
    • Statik veya genel üyeye sahip olun.
    • bir std::işlevine geçirilir. Bu, orijinal bir ODR ihlaline neden olur ve C1092 ile sonuçlanmaktadır.
  • Düzenle ve Devam Et statik kitaplıkları güncelleştirmez. Statik kitaplıkta değişiklik yaparsanız yürütme eski sürümle devam eder ve hiçbir uyarı yapılmaz.

Desteklenmeyen senaryolar

C/C++ için Düzenle ve Devam Et, aşağıdaki hata ayıklama senaryolarında kullanılamaz:

  • /Zo ile derlenen yerel uygulamalarda hata ayıklama (İyileştirilmiş Hata Ayıklamayı İyileştir)

  • VC 120 araç takımını ve C/C++ /bigobj anahtarını kullanan projeler. Düzenleme ve Devam Et /bigobj yalnızca VC 140 araç takımında desteklenir.

  • Karma mod (yerel/yönetilen) hata ayıklama.

  • JavaScript hata ayıklama.

  • SQL hata ayıklama.

  • Döküm dosyasında hata ayıklama.

  • İşlenmeyen bir özel durumdan sonra işlenmeyen özel durumlarda çağrı yığınını geri al seçeneği belirlenmediğinde kod düzenleniyor.

  • Hata Ayıkla menüsünde Başlat'ı seçerek uygulamayı çalıştırmak yerine Ekle'yi kullanarak uygulamada hata ayıklama.

  • İyileştirilmiş kodda hata ayıklama.

  • Derleme hataları nedeniyle yeni bir sürüm oluşturulamadıktan sonra kodunuzun eski bir sürümünde hata ayıklama.

  • Özel derleyici (cl.exe) yolu kullanma. Güvenlik nedenleriyle, Düzenle ve Devam Et sırasında bir dosyanın yeniden derlenişi için Visual Studio her zaman yüklü derleyiciyi kullanır. Özel bir derleyici yolu kullanıyorsanız (örneğin, dosyanızdaki *.props özel $(ExecutablePath) bir değişken aracılığıyla), bir uyarı görüntülenir ve Visual Studio aynı sürümün/mimarinin yüklü derleyicisini kullanmaya geri döner.

  • Eski Mimariler/VC Araç Kümeleri. VC 140 araç takımıyla, varsayılan hata ayıklayıcı hem X86 hem de X64 uygulamalarıyla Düzenle ve Devam Et'i destekler. Eski araç kümeleri yalnızca X86 uygulamalarını destekler. VC 120'den eski araç kümeleri, Düzenle ve Devam Et'i kullanmak için "Hata Ayıklama > Seçenekleri > Genel > Yerel Uyumluluk Modunu Kullan" seçeneğini işaretleyerek eski hata ayıklayıcıyı kullanmalıdır.

Bağlama sınırlamaları

Düzenle ve Devam Et'i devre dışı bırakmayan bağlayıcı seçenekleri

Aşağıdaki bağlayıcı seçenekleri Düzenle ve Devam Et'i devre dışı bırakır:

  • /OPT:REF, /OPT:ICF veya /INCREMENTAL:NO ayarı Düzenle ve Devam Et'i şu uyarıyla devre dışı bırakır:
    LINK : warning LNK4075: ignoring /EDITANDCONTINUE due to /OPT specification

  • /ORDER, /RELEASE veya /FORCE ayarı, Düzenle ve Devam Et'i aşağıdaki uyarıyla devre dışı bırakır:
    LINK : warning LNK4075: ignoring /INCREMENTAL due to /option specification

  • Program veritabanı (.pdb) dosyasının oluşturulmasını engelleyen herhangi bir seçeneğin ayarlanması, Düzenle ve Devam Et'i belirli bir uyarı olmadan devre dışı bırakır.

Otomatik yeniden bağlama sınırlamaları

Varsayılan olarak, Düzenle ve Devam Et, güncel bir yürütülebilir dosya oluşturmak için hata ayıklama oturumunun sonunda programınızı yeniden bağlar.

Özgün derleme konumundan farklı bir konumdan hata ayıklarsanız, Düzenle ve Devam Et programınızın bağlantısını yeniden kuramaz. İleti, el ile yeniden oluşturmanız gerektiğini bildirir.

Düzenle ve Devam Et statik kitaplıkları yeniden oluşturmaz. Düzenle ve Devam Et'i kullanarak statik kitaplıkta değişiklik yaparsanız, kitaplığı el ile yeniden oluşturmanız ve uygulamaları kullanarak yeniden bağlamanız gerekir.

Düzenle ve Devam Et özel derleme adımlarını çağırmaz. Programınız özel derleme adımları kullanıyorsa, özel derleme adımlarının çağrılabilmesi için el ile yeniden derlemek isteyebilirsiniz. Bu durumda, el ile yeniden derlemeniz istendiğinden emin olmak için Düzenle ve Devam Et'in ardından yeniden bağlantıyı devre dışı bırakabilirsiniz.

Düzenle ve Devam Et'in ardından yeniden bağlantıyı devre dışı bırakmak için

  1. Hata Ayıklamenüsünde Seçenekler'i seçin ve Ayarlar.

  2. Seçenekler iletişim kutusunda, Hata Ayıklama düğümü altında Düzenle ve Devam Et düğümünü seçin.

  3. Hata ayıklamadan sonra kod değişikliklerini yeniden bağla onay kutusunu temizleyin.

Önceden derlenmiş üst bilgi sınırlamaları

Varsayılan olarak, Düzenle ve Devam Et kod değişikliklerinin işlenmesini hızlandırmak için arka planda önceden derlenmiş üst bilgileri yükler ve işler. Önceden derlenmiş üst bilgilerin yüklenmesi için fiziksel belleğin ayrılması gerekir. Bu, sınırlı RAM'e sahip bir makinede derleme yaparsanız sorun olabilir. Hata ayıklarken kullanılabilir fiziksel bellek miktarını belirlemek için Windows Görev Yöneticisi'ni kullanarak bunun bir sorun olup olmadığını belirleyebilirsiniz. Bu tutar önceden derlenmiş üst bilgilerinizin boyutundan büyükse Düzenle ve Devam Et sorun olmamalıdır. Miktar önceden derlenmiş üst bilgilerinizin boyutundan küçükse, Düzenle ve Devam Et'in önceden derlenmiş üst bilgileri arka planda yüklemesini engelleyebilirsiniz.

Düzenle ve Devam Et için önceden derlenmiş üst bilgilerin arka plan yüklemesini devre dışı bırakmak için

  1. Hata Ayıklamenüsünde Seçenekler'i seçin ve Ayarlar.

  2. Seçenekler iletişim kutusunda, Hata Ayıklama düğümü altında Düzenle ve Devam Et düğümünü seçin.

  3. Ön Derlemeye İzin Ver onay kutusunu temizleyin.

IDL öznitelik sınırlamaları

Düzenle ve Devam Et, arabirim tanım dili (IDL) dosyalarını yeniden oluşturmaz. Bu nedenle, siz hata ayıklarken IDL özniteliklerindeki değişiklikler yansıtılmaz. IDL özniteliklerinde yapılan değişikliklerin sonucunu görmek için hata ayıklamayı durdurmanız ve uygulamanızı yeniden oluşturmanız gerekir. IDL öznitelikleri değiştiyse Düzenle ve Devam Et bir hata veya uyarı oluşturmaz. Daha fazla bilgi için bkz . IDL Öznitelikleri.

Sorunları tanılama

Senaryonuz yukarıda belirtilen koşullardan herhangi birine uymuyorsa, aşağıdaki DWORD kayıt defteri değerini ayarlayarak daha fazla ayrıntı toplayabilirsiniz:

  1. Bir Geliştirici Komut İstemi açın.
  2. Şu komutu çalıştırın:
    VsRegEdit.exe set “C:\Program Files\Microsoft Visual Studio\[Version]\[YOUR EDITION]” HKCU Debugger NativeEncDiagnosticLoggingLevel DWORD 1
    VsRegEdit.exe set “C:\Program Files (x86)\Microsoft Visual Studio\[Version]\[YOUR EDITION]” HKCU Debugger NativeEncDiagnosticLoggingLevel DWORD 1

Hata ayıklama oturumunun başlangıcında bu değerin ayarlanması, Düzenle ve Devam Et'in çeşitli bileşenlerinin Çıkış Penceresi>Hata Ayıklama bölmesine ayrıntılı günlük kaydı eklemesine neden olur.