Bagikan melalui


Perubahan Kode yang Didukung (C++)

Edit dan Lanjutkan untuk proyek C++ menangani sebagian besar jenis perubahan kode. Namun, beberapa perubahan tidak dapat diterapkan selama eksekusi program. Untuk menerapkan perubahan ini, Anda harus menghentikan eksekusi dan membangun versi baru kode.

Lihat Edit dan Lanjutkan (C++) untuk informasi tentang bekerja dengan Edit dan Lanjutkan untuk C++ di Visual Studio.

Persyaratan

Pengaturan build (Properti Proyek >):

  1. C/C++ > Umum > Format Informasi Debug: Basis Data Program untuk Edit dan Lanjutkan (/ZI)

  2. Linker > Umum > Aktifkan Penautan Bertambah Bertahap: Ya (/INCREMENTAL)

    Setiap pengaturan linker yang tidak kompatibel (seperti /SAFESEH, atau /OPT:...) akan menyebabkan peringatan LNK4075 selama build.
    Contoh: LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:ICF' specification

Pengaturan debugger (Opsi > Debug > Umum):

  • Aktifkan Edit Asli dan Lanjutkan

    Setiap pengaturan pengompilasi atau linker yang tidak kompatibel menyebabkan kesalahan selama Edit dan Lanjutkan.
    Contoh: 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.

Perubahan yang tidak didukung

Perubahan C/C++ berikut tidak dapat diterapkan selama sesi penelusuran kesalahan. Jika Anda membuat salah satu perubahan ini lalu mencoba menerapkan perubahan kode, kesalahan atau pesan peringatan muncul di jendela Output.

  • Sebagian besar perubahan pada data global atau statis.

  • Perubahan pada executable yang disalin dari komputer lain dan tidak dibangun secara lokal.

  • Perubahan pada jenis data yang memengaruhi tata letak objek, seperti anggota data kelas.

  • Menambahkan lebih dari 64k byte kode atau data baru.

  • Menambahkan variabel yang memerlukan konstruktor pada titik sebelum penunjuk instruksi.

  • Perubahan yang memengaruhi kode yang memerlukan inisialisasi run-time.

  • Menambahkan penghandel pengecualian, dalam beberapa kasus.

  • Perubahan pada file sumber daya.

  • Perubahan pada kode dalam file baca-saja.

  • Perubahan pada kode tanpa file PDB yang sesuai.

  • Perubahan pada kode yang tidak memiliki file objek.

  • Memodifikasi lambda yang:
    • Memiliki anggota statis atau global.
    • Diteruskan ke std::function. Hal ini menyebabkan pelanggaran ODR asli dan mengakibatkan C1092.
  • Edit dan Lanjutkan tidak memperbarui pustaka statis. Jika Anda membuat perubahan di pustaka statis, eksekusi berlanjut dengan versi lama dan tidak ada peringatan yang dikeluarkan.

Skenario yang tidak didukung

Edit dan Lanjutkan untuk C/C++ tidak tersedia dalam skenario penelusuran kesalahan berikut:

  • Men-debug aplikasi asli yang dikompilasi dengan /Zo (Meningkatkan Debugging Yang Dioptimalkan)

  • Proyek yang menggunakan toolset VC 120 dan sakelar C/C++ /bigobj . Edit dan Lanjutkan dengan /bigobj hanya didukung di toolset VC 140.

  • Debugging mode campuran (asli/terkelola).

  • Penelusuran kesalahan JavaScript.

  • Penelusuran Kesalahan SQL.

  • Penelusuran kesalahan file cadangan.

  • Mengedit kode setelah pengecualian yang tidak tertangani, ketika opsi Lepaskan tumpukan panggilan pada pengecualian yang tidak terhandel tidak dipilih.

  • Penelusuran kesalahan aplikasi dengan menggunakan Lampirkan ke alih-alih menjalankan aplikasi dengan memilih Mulai pada menu Debug.

  • Menelusuri kesalahan kode yang dioptimalkan.

  • Menelusuri kesalahan versi lama kode Anda setelah versi baru gagal dibuat karena kesalahan build.

  • Menggunakan jalur pengompilasi kustom (cl.exe). Untuk alasan keamanan, untuk kompilasi ulang file selama Edit dan Lanjutkan, Visual Studio selalu menggunakan pengompilasi yang diinstal. Jika Anda menggunakan jalur pengompilasi kustom (misalnya, melalui variabel $(ExecutablePath) kustom dalam file Anda*.props), peringatan ditampilkan dan Visual Studio kembali menggunakan pengompilasi yang diinstal dari versi/arsitektur yang sama.

  • Arsitektur Warisan/Toolset VC. Dengan toolset VC 140, debugger default mendukung Edit dan Lanjutkan dengan aplikasi X86 dan X64. Toolset lama hanya mendukung aplikasi X86. Perangkat yang lebih lama dari VC 120 harus menggunakan debugger lama dengan mencentang “Opsi > Debug > Umum > Gunakan Mode Kompatibilitas Asli” untuk menggunakan Edit dan Lanjutkan.

Batasan penautan

Opsi linker yang menonaktifkan Edit dan Lanjutkan

Opsi linker berikut menonaktifkan Edit dan Lanjutkan:

  • Pengaturan /OPT:REF, /OPT:ICF, atau /INCREMENTAL:NO menonaktifkan Edit dan Lanjutkan dengan peringatan berikut:
    LINK : warning LNK4075: ignoring /EDITANDCONTINUE due to /OPT specification

  • Pengaturan /ORDER, /RELEASE, atau /FORCE menonaktifkan Edit dan Lanjutkan dengan peringatan berikut:
    LINK : warning LNK4075: ignoring /INCREMENTAL due to /option specification

  • Mengatur opsi apa pun yang mencegah pembuatan file database program (.pdb) menonaktifkan Edit dan Lanjutkan tanpa peringatan tertentu.

Batasan tautan ulang otomatis

Secara default, Edit dan Lanjutkan menautkan ulang program Anda di akhir sesi penelusuran kesalahan untuk membuat executable terbaru.

Edit dan Lanjutkan tidak dapat menautkan ulang program Anda jika Anda melakukan penelusuran kesalahan dari lokasi selain lokasi build asli. Pesan memberi tahu Anda bahwa Anda perlu membangun kembali secara manual.

Edit dan Lanjutkan tidak membangun kembali pustaka statis. Jika Anda membuat perubahan pada pustaka statis menggunakan Edit dan Lanjutkan, Anda perlu membangun kembali pustaka dan menautkan ulang aplikasi secara manual menggunakannya.

Edit dan Lanjutkan tidak memanggil langkah-langkah build kustom. Jika program Anda menggunakan langkah-langkah build kustom, Anda mungkin ingin membangun kembali secara manual sehingga langkah-langkah build kustom dapat dipanggil. Dalam hal ini, Anda dapat menonaktifkan tautan ulang setelah Edit dan Lanjutkan untuk memastikan bahwa Anda diminta untuk membangun kembali secara manual.

Untuk menonaktifkan tautan ulang setelah Edit dan Lanjutkan

  1. Pada menu Debug, pilih Opsi dan Pengaturan.

  2. Dalam kotak dialog Opsi, di bawah node Penelusuran Kesalahan, dan pilih node Edit dan Lanjutkan.

  3. Kosongkan kotak centang Tautan ulang perubahan kode setelah penelusuran kesalahan.

Batasan header yang telah dikompilasi sebelumnya

Secara default, Edit dan Lanjutkan memuat dan memproses header yang telah dikompilasi sebelumnya di latar belakang untuk mempercepat pemrosesan perubahan kode. Memuat header yang telah dikompilasi sebelumnya memerlukan alokasi memori fisik, yang dapat menjadi masalah jika Anda mengompilasi pada mesin dengan RAM terbatas. Anda dapat menentukan apakah ini mungkin masalah dengan menggunakan Windows Task Manager untuk menentukan jumlah memori fisik yang tersedia saat Anda melakukan penelusuran kesalahan. Jika jumlah ini lebih besar dari ukuran header yang telah dikompilasi sebelumnya, Edit dan Lanjutkan seharusnya tidak bermasalah. Jika jumlahnya kurang dari ukuran header yang telah dikompilasi sebelumnya, Anda dapat mencegah Edit dan Lanjutkan memuat header yang telah dikompilasi sebelumnya di latar belakang.

Untuk menonaktifkan pemuatan latar belakang header yang telah dikompilasi sebelumnya untuk Edit dan Lanjutkan

  1. Pada menu Debug, pilih Opsi dan Pengaturan.

  2. Dalam kotak dialog Opsi, di bawah node Penelusuran Kesalahan, dan pilih node Edit dan Lanjutkan.

  3. Kosongkan kotak centang Perbolehkan Kompilasi Sebelumnya.

Batasan atribut IDL

Edit dan Lanjutkan tidak meregenerasi file bahasa definisi antarmuka (IDL). Oleh karena itu, perubahan pada atribut IDL tidak akan tercermin saat Anda melakukan debug. Untuk melihat hasil perubahan pada atribut IDL, Anda harus menghentikan penelusuran kesalahan dan membangun ulang aplikasi Anda. Edit dan Lanjutkan tidak menghasilkan kesalahan atau peringatan jika atribut IDL telah berubah. Untuk informasi selengkapnya, lihat Atribut IDL.

Mendiagnosis masalah

Jika skenario Anda tidak sesuai dengan kondisi apa pun yang disebutkan di atas, Anda dapat mengumpulkan detail lebih lanjut dengan mengatur nilai registri DWORD berikut:

  1. Buka Perintah Pengembang.
  2. Jalankan perintah berikut:
    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

Mengatur nilai ini di awal sesi debug menyebabkan berbagai komponen Edit dan Lanjutkan memuntahkan pengelogan verbose ke panel Output Window>Debug.