C / C ++ untuk Kode VS (Pratinjau)
Dukungan C / C ++ untuk Visual Studio Code disediakan oleh ekstensi Microsoft C / C ++ untuk mengaktifkan pengembangan C dan C ++ lintas platform dengan menggunakan Kode VS pada Windows, Linux, dan macOS. Ekstensi masih dalam pratinjau dan fokus kami adalah pengeditan kode, navigasi, dan dukungan debug untuk kode C dan C ++ di mana saja VS Code berjalan.
Jika Anda hanya menginginkan alat yang ringan untuk mengedit file C ++ Anda, Kode Visual Studio adalah pilihan tepat, tetapi jika Anda menginginkan pengalaman terbaik untuk proyek Visual C ++ atau debugging yang ada di Windows, sebaiknya Anda menggunakan versi Visual Studio seperti Komunitas Visual Studio .
Jika Anda mengalami masalah atau memiliki saran untuk ekstensi Microsoft C / C ++, ajukan masalah dan saran tentang GitHub . Jika Anda belum memberikan umpan balik, ambil survei singkat ini untuk membantu membentuk perpanjangan ini sesuai kebutuhan Anda.
Catatan untuk pengguna Linux : Ekstensi C / C ++ bekerja pada distro Linux 64-bit yang telah glibc 2.18 atau yang lebih baru diinstal.
Mulai
Untuk menginstal ekstensi Microsoft C / C ++:
- Buka Kode VS.
- Klik ikon Extensions View di Sidebar.
- Cari
c++
- Klik Install , lalu klik Reload .
Dengan ekstensi C / C ++ terpasang, buka folder yang berisi kode sumber C / C ++ Anda. Kode VS akan menempatkan berbagai file pengaturan ke dalam subfolder
.vscode
.
Catatan : Ekstensi C / C ++ tidak menyertakan compiler C ++ atau debugger. Anda perlu menginstal alat ini atau menggunakannya yang sudah terpasang di komputer Anda. Kompiler C ++ yang populer adalah MinGW untuk Windows, Xcode untuk macos, dan GCC di Linux. Juga pastikan compiler Anda dapat dieksekusi pada jalur platform Anda untuk VS Code untuk ditemukan.
IntelliSense
Untuk mengaktifkan penyelesaian kode dan navigasi, Anda perlu membuat file
c_cpp_properties.json
:- Temukan coretan hijau di file sumber (misalnya, pernyataan #include) dan atur kursor di telepon.
- Klik bola lampu yang muncul di selokan kiri.
- Klik Perbarui pengaturan "browse.path" .
Ini akan menghasilkan file
c_cpp_properties.json
yang memungkinkan Anda menambahkan jalur penjelajahan tambahan untuk mengaktifkan navigasi kode dan penyelesaian otomatis dengan benar. File c_cpp_properties.json
dihasilkan memiliki bagian untuk sistem operasi yang berbeda, pastikan Anda memperbarui pengaturan yang sesuai untuk platform Anda saat ini.
Di bawah ini Anda dapat melihat bahwa MinGW C ++ menyertakan path yang telah ditambahkan ke
browse.path
for Windows: { " name ": "Win32" , " includePath ": [ "${workspaceFolder}" ] , " defines ": [ "_DEBUG" , "UNICODE" ] , " intelliSenseMode ": "msvc-x64" , " browse ": { " path ": [ "${workspaceFolder}" , "C:\\MinGW\\lib\\gcc\\mingw32\\6.3.0\\include\\c++" ] , " limitSymbolsToIncludedHeaders ": true , " databaseFilename ": "" } }
Catatan: Anda juga dapat membuat atau mengedit filec_cpp_properties.json
dengan perintah C / Cpp: Edit Configuration dari Command Palet ( Ctrl+Shift+P ).
Membangun kode Anda
Jika Anda ingin membangun aplikasi Anda dari VS Code, Anda perlu membuat file
tasks.json
:- Buka Palet Perintah ( Ctrl+Shift+P ).
- Pilih Tasks: Configure Task Runner command dan Anda akan melihat daftar template runner.
- Pilih Orang Lain untuk membuat tugas yang menjalankan perintah eksternal.
- Ubah
command
ke ekspresi baris perintah yang Anda gunakan untuk membuat aplikasi Anda (misalnyag++
). - Tambahkan args yang dibutuhkan (misalnya
-g
untuk membangun debugging). - Anda juga bisa mengubah
taskName
menjadi lebih deskriptif.
Anda sekarang harus melihat
tasks.json
file di ruang kerja Anda. .vscode
folder yang terlihat seperti: { " version ": "2.0.0" , " tasks ": [ { " taskName ": "build hello world" , " type ": "shell" , " command ": "g++" , " args ": [ "-g" , "helloworld.cpp" ] } ] }
Jika Anda ingin dapat membangun aplikasi dengan Tasks: Jalankan Build Task ( Ctrl+Shift+B ), Anda dapat menambahkannya ke grup build
.
{ " version ": "2.0.0" , " tasks ": [ { " taskName ": "build hello world" , " type ": "shell" , " command ": "g++" , " args ": [ "-g" , "helloworld.cpp" ] , " group ": { " kind ": "build" , " isDefault ": true } } ] }
Untuk informasi lebih lanjut tentang tugas, lihat Mengintegrasikan dengan Alat Eksternal melalui Tugas .
Debugging kode Anda
Untuk mengaktifkan debugging, Anda perlu membuat file launch.json
:
- Arahkan ke tampilan Debug dengan mengklik ikon Debug di Sidebar.
- Pada tampilan Debug , klik ikon Configure .
- Pilih
C++ (GDB/LLDB)
(untuk menggunakan GDB atau LLDB) atauC++ (Windows)
(untuk menggunakan Visual Studio Windows Debugger) dari dropdown Select Environment . Ini membuat filelaunch.json
untuk diedit dengan dua konfigurasi:- C ++ Launch mendefinisikan properti untuk meluncurkan aplikasi Anda saat Anda memulai debugging.
- C ++ Attach mendefinisikan properti untuk melekat pada proses yang sudah berjalan.
- Perbarui properti
program
dengan jalur ke program yang sedang Anda debug. - Jika Anda ingin aplikasi Anda membangun saat memulai debugging, tambahkan properti
preLaunchTask
dengan nama tugas bangun yang Anda buat ditasks.json
("build hello world" pada contoh di atas).
Berikut adalah contoh menggunakan debugger GDG MinGW:
{ " version ": "0.2.0" , " configurations ": [ { " name ": "(gdb) Launch" , " type ": "cppdbg" , " request ": "launch" , " program ": "${workspaceFolder}/a.exe" , " args ": [] , " stopAtEntry ": false , " cwd ": "${workspaceFolder}" , " environment ": [] , " externalConsole ": true , " MIMode ": "gdb" , " miDebuggerPath ": "C:\\mingw\\bin\\gdb.exe" , " setupCommands ": [ { " description ": "Enable pretty-printing for gdb" , " text ": "-enable-pretty-printing" , " ignoreFailures ": true } ] , " preLaunchTask ": "build hello world" } ] }
Untuk mempelajari lebih lanjut, lihat Mengkonfigurasi launch.json untuk debugging C / C ++ .
Jika Anda melakukan debugging dengan GDB di Windows, lihat Windows Debugging with GDB .
Kode pengeditan
Pemformatan kode
Ekstensi C / C ++ untuk Visual Studio Code mendukung pemformatan kode sumber menggunakan format clang yang disertakan dengan ekstensi.
Anda dapat memformat keseluruhan file dengan Format Document ( Shift+Alt+F ) atau hanya pilihan saat ini dengan Format Selection ( Ctrl+K Ctrl+F ) pada menu konteks klik kanan. Anda juga dapat mengkonfigurasi format otomatis dengan pengaturan berikut:
C_Cpp.clang_format_formatOnSave
- untuk memformat saat Anda menyimpan file Anda.editor.formatOnType
- untuk memformat saat Anda mengetik (dipicu pada karakter ; )
Secara default, style
.clang-format
diatur ke "file" yang berarti mencari file .clang-format
di dalam ruang kerja Anda. Jika file .clang-format
ditemukan, format diterapkan sesuai dengan pengaturan yang ditentukan dalam file. Jika file .clang-format
tidak ditemukan di ruang kerja Anda, pemformatan diterapkan berdasarkan gaya default yang ditentukan dalam pengaturanC_Cpp.clang_format_fallbackStyle
. Saat ini, format defaultnya adalah "Visual Studio". Menggunakan format "Visual Studio" memastikan pemformatan kode sumber akan kompatibel di VS Code dan Visual Studio Community.
Format clang-format "Visual Studio" belum menjadi format mode clang resmi OOTB namun ini berarti pengaturan format clang berikut:
UseTab: (VS Code current setting) IndentWidth: (VS Code current setting) BreakBeforeBraces: AllMan AllowShortIfStatementsOnASingleLine: false IndentCaseLabels: false ColumnLimit: 0
Jika Anda ingin menggunakan versi clang-format yang berbeda dari pada yang dikirimkan dengan ekstensi, Anda dapat menggunakan pengaturan
C_Cpp.clang_format_path
dan menyetel nilainya ke jalur di mana biner format- C_Cpp.clang_format_path
terpasang.
Misalnya pada platform Windows:
"C_Cpp.clang_format_path" : "C:\\Program Files (x86)\\LLVM\\bin\\clang-format.exe"
Fuzzy Auto-Complete
Fuzzy auto-complete didukung oleh pendekatan tag-parser yang disempurnakan. Meskipun saran tidak didasarkan pada analisis semantik kode Anda, fitur ini memberikan pilihan kecocokan yang lebih luas daripada pengalaman IntelliSense single-file yang disediakan saat ini.
Secara khusus, kemampuan fitur ini memberikan pengalaman yang baik untuk kode C.
Menjelajahi Kode
Fitur navigasi kode sumber yang disediakan oleh ekstensi C / C ++ adalah alat yang hebat untuk memahami dan menyiasati basis kode Anda. Fitur ini didukung oleh tag yang tersimpan dalam basis data simbol informasi offline. Dengan ekstensi C / C ++ yang terpasang, database ini dihasilkan setiap kali sebuah folder berisi file kode sumber C ++ dimuat ke dalam VS Code. Indikator platform (Win32 pada gambar di bawah) berubah menjadi merah dan muncul di samping ikon nyala saat parser tag menghasilkan informasi ini.
Bila indikator platform kembali ke tampilan normalnya, simbol kode sumber telah ditandai dalam database offline dan fitur navigasi kode sumber siap digunakan.
Menentukan Direktori Tambahan untuk Dukungan Simbol yang Lebih Baik
Untuk memberikan pengalaman terbaik, perpanjangan C / C ++ untuk VS Code perlu mengetahui di mana ia dapat menemukan setiap file header yang direferensikan dalam kode Anda. Secara default, ekstensi mencari direktori sumber saat ini, sub-direktori, dan beberapa lokasi spesifik platform. Jika file header yang direferensikan tidak dapat ditemukan, Kode VS menampilkan coretan hijau di bawah setiap #include directive yang mereferensikannya.
Untuk menentukan direktori include tambahan yang akan dicari, letakkan kursor di atas setiap #include directive yang menampilkan coretan hijau, lalu klik tombol lightbulb saat muncul. Ini akan membuka file
c_cpp_properties.json
untuk diedit; Di sini Anda dapat menentukan direktori include tambahan untuk setiap konfigurasi platform secara individual dengan menambahkan lebih banyak direktori ke properti 'browse.path'.Cari Simbol
Anda dapat mencari simbol dalam file atau ruang kerja saat ini untuk menavigasi kode Anda lebih cepat.
Untuk mencari simbol dalam file saat ini, tekan Ctrl+Shift+O , lalu masukkan nama simbol yang Anda cari. Daftar kecocokan potensial akan muncul dan disaring saat Anda mengetik. Pilih dari daftar kecocokan untuk menavigasi ke lokasi.
Untuk mencari simbol di ruang kerja saat ini, mulailah dengan menekan Ctrl+T , lalu masukkan nama simbolnya. Daftar kecocokan potensial akan muncul seperti sebelumnya. Jika Anda memilih kecocokan yang ditemukan di file yang belum dibuka, file akan dibuka sebelum menavigasi ke lokasi pertandingan
Sebagai alternatif, Anda dapat mencari simbol dengan mengakses perintah ini melalui Palet Perintah jika Anda mau. Gunakan Quick Open ( Ctrl+P ) lalu masukkan perintah '@' untuk mencari file saat ini, atau perintah '#' untuk mencari ruang kerja saat ini. Ctrl+Shift+O dan Ctrl+T hanyalah jalan pintas untuk perintah '@' dan '#', sehingga semuanya berjalan dengan baik.
Definisi Peek
Anda dapat melihat sekilas bagaimana simbol didefinisikan dengan menggunakan fitur Peek Definition.Fitur ini menampilkan beberapa baris kode di dekat definisi di dalam jendela pengintip sehingga Anda dapat melihat tanpa menavigasi dari lokasi Anda saat ini.
Untuk mengintip definisi simbol, letakkan kursor pada simbol di mana saja digunakan pada kode sumber Anda lalu tekan Alt+F12 . Sebagai alternatif, Anda bisa memilih Peek Definition dari menu konteks (klik kanan, lalu pilih Peek Definition ).
Saat ini, ekstensi C / C ++ tidak mengurai kode dengan cara yang membantu membedakan antara definisi bersaing berdasarkan bagaimana simbol digunakan. Definisi bersaing ini muncul ketika simbol mendefinisikan hal yang berbeda dalam konteks yang berbeda, seperti terjadi dengan fungsi kelebihan beban, kelas dan konstruktor mereka, dan situasi lainnya. Bila ini terjadi, masing-masing definisi bersaing tercantum di sisi kanan jendela pengintip dengan kode sumber pilihan saat ini yang ditampilkan di sebelah kiri.
Dengan jendela mengintip terbuka, Anda menelusuri daftar definisi yang bersaing untuk menemukan yang Anda minati. Jika Anda ingin menavigasi ke lokasi salah satu definisi cukup klik dua kali definisi yang Anda minati, atau oleh klik dua kali di manapun dalam kode sumber yang ditampilkan di sisi kiri jendela pengintip.
Pergi ke Definisi
Anda juga dapat dengan cepat menavigasi ke tempat simbol didefinisikan dengan menggunakan fitur Go to Definition.
Untuk masuk ke definisi simbol, letakkan kursor pada simbol di mana saja yang digunakan dalam kode Anda lalu tekan F12 . Sebagai alternatif, Anda dapat memilih Go to Definition dari menu konteks (klik kanan, lalu pilih Go to Definition ). Bila hanya ada satu definisi simbol, Anda akan menavigasi langsung ke lokasinya, jika tidak, definisi yang bersaing akan ditampilkan di jendela yang mengintip seperti yang dijelaskan di bagian sebelumnya dan Anda harus memilih definisi yang ingin Anda tuju.
Debugging
Setelah Anda menyiapkan dasar-dasar lingkungan debugging Anda seperti yang ditentukan dalam Getting Started , Anda dapat mempelajari lebih banyak rincian tentang debugging C / C ++ di bagian ini.
Kode VS mendukung debugger berikut untuk C / C ++ tergantung pada sistem operasi yang Anda gunakan:
- Linux : GDB
- macos : LLDB atau GDB
- Windows : Visual Studio Windows Debugger atau GDB (menggunakan Cygwin atau MinGW)
Windows Debugging dengan GDB
Anda bisa men-debug aplikasi Windows yang dibuat menggunakan Cygwin atau MinGW dengan menggunakan VS Code. Untuk menggunakan fitur debugging Cygwin atau MinGW, jalur debugger harus disetel secara manual dalam konfigurasi peluncuran (
launch.json
). Untuk debug aplikasi Cygwin atau MinGW Anda, tambahkan properti miDebuggerPath
dan tetapkan nilainya ke lokasi gdb.exe yang sesuai untuk lingkungan Cygwin atau MinGW Anda.
Sebagai contoh:
"miDebuggerPath" : "c:\\mingw\\bin\\gdb.exe"
Cygwin / MinGW debugging pada Windows mendukung baik melampirkan dan meluncurkan skenario debugging.
Breakpoint bersyarat
Breakpoint bersyarat memungkinkan Anda untuk melepaskan eksekusi pada baris kode tertentu hanya jika nilai kondisinya benar. Untuk mengatur breakpoint bersyarat, klik kanan pada breakpoint yang ada dan pilih Edit Breakpoint . Ini membuka jendela kecil mengintip di mana Anda dapat memasukkan kondisi yang harus dievaluasi ke true agar breakpoint terpukul selama debugging.
Dalam editor, breakpoint bersyarat ditunjukkan oleh simbol breakpoint yang memiliki tanda sama dengan hitam di dalamnya. Anda dapat menempatkan kursor di atas titik balik kondisional untuk menunjukkan kondisinya.
Fungsi Breakpoints
Fungsi breakpoints memungkinkan Anda untuk menghentikan eksekusi pada awal fungsi dan bukan pada baris kode tertentu. Untuk mengatur breakpoint fungsi, pada panel Debug klik kanan di bagian Breakpoints , lalu pilih Add Function Breakpoint dan masukkan nama fungsi yang Anda inginkan untuk menghentikan eksekusi.
Evaluasi Ekspresi
Kode VS mendukung evaluasi ekspresi dalam beberapa konteks:
- Anda dapat mengetikkan ekspresi ke bagian Tontonan panel Debug dan akan dievaluasi setiap kali sebuah breakpoint terpukul.
- Anda dapat mengetikkan ekspresi ke dalam Konsol Debug dan hanya akan dievaluasi satu kali.
- Anda dapat mengevaluasi ekspresi yang muncul dalam kode Anda saat Anda berhenti di titik istirahat.
Perhatikan bahwa ungkapan di bagian Watch berpengaruh pada aplikasi yang sedang debugged; sebuah ekspresi yang mengubah nilai variabel akan mengubah variabel tersebut selama durasi program.
Debugging multi-threaded
Ekstensi C / C ++ untuk VS Code memiliki kemampuan untuk men-debug program multi-threaded.Semua benang dan tumpukan panggilan mereka muncul di bagian Call Stack :
Memory Dump Debugging
Ekstensi C / C ++ untuk VS Code juga memiliki kemampuan untuk debug memori dumps. Untuk debug dump memori, buka file
launch.json
Anda dan tambahkan properti coreDumpPath
(untuk GDB atau LLDB) atau dumpPath
(untuk properti Visual Studio Windows Debugger) ke konfigurasi C ++ Launch , tetapkan nilainya menjadi string yang berisi jalur ke dump memori Ini bahkan akan bekerja untuk program x86 yang di-debug pada mesin x64.Simbol Tambahan
Jika ada direktori tambahan dimana debugger dapat menemukan file simbol (misalnya file
.pdb
untuk Visual Studio Windows Debugger), mereka dapat ditentukan dengan menambahkan additionalSOLibSearchPath
(untuk GDB atau LLDB) atau symbolSearchPath
(untuk Visual Studio Windows Debugger ).
Sebagai contoh:
"additionalSOLibSearchPath" : "/path/to/symbols;/another/path/to/symbols"
atau
"symbolSearchPath" : "C:\\path\\to\\symbols;C:\\another\\path\\to\\symbols"
Cari file sumber
Lokasi file sumber dapat diubah jika file sumber tidak berada di lokasi kompilasi. Hal ini dilakukan dengan pasangan pengganti sederhana yang ditambahkan pada bagian
sourceFileMap
. Pertandingan pertama dalam daftar ini akan digunakan.
Sebagai contoh:
"sourceFileMap" : { " /build/gcc-4.8-fNUjSI/gcc-4.8-4.8.4/build/i686-linux-gnu/libstdc++-v3/include/i686-linux-gnu ": "/usr/include/i686-linux-gnu/c++/4.8" , " /build/gcc-4.8-fNUjSI/gcc-4.8-4.8.4/build/i686-linux-gnu/libstdc++-v3/include ": "/usr/include/c++/4.8" }
Perintah GDB, LLDB dan MI (GDB / LLDB)
Untuk lingkungan debugging
C++ (GDB/LLDB)
, Anda dapat menjalankan perintah GDB, LLDB dan MI secara langsung melalui konsol debug dengan perintah -exec
, namun berhati-hatilah, jalankan perintah secara langsung di konsol debug yang belum teruji dan mungkin macet VS Code in beberapa kasus.Fitur Debugging Lainnya
- Breakpoints tanpa syarat
- Jendela tonton
- Panggil tumpukan
- Melangkah
Untuk informasi lebih lanjut tentang debugging dengan VS Code, lihat pendahuluan ini untuk debugging di VS Code .
Dikenal Keterbatasan
Simbol dan Navigasi Kode
Semua platform:
- Karena ekstensi tidak mengurai fungsi badan, Peek Definition and Go to Definition tidak bekerja untuk simbol yang didefinisikan di dalam tubuh fungsi.
Debugging
Windows:
- GDB pada Cygwin dan MinGW tidak bisa memecahkan proses yang berjalan. Untuk mengatur breakpoint saat aplikasi berjalan (tidak berhenti di bawah debugger), atau untuk menjeda aplikasi yang sedang debugged, tekan Ctrl-C di terminal aplikasi.
- GDB on Cygwin tidak bisa membuka core dumps.
Linux:
- GDB membutuhkan izin yang tinggi untuk dilampirkan ke sebuah proses. Saat menggunakan melampirkan pada proses , Anda perlu memberikan kata sandi Anda sebelum sesi debugging dapat dimulai.
macos:
- LLDB:
- Saat melakukan debugging dengan LLDB, jika jendela Terminal ditutup saat berada dalam mode istirahat, debugging tidak berhenti. Debugging bisa dihentikan dengan menekan tombol Stop .
- Saat debugging dihentikan jendela Terminal tidak ditutup.
- GDB:
- Langkah-langkah pemasangan manual tambahan perlu dilengkapi untuk menggunakan GDB pada macos. Lihat Manual Pemasangan GDB untuk OS X di README .
- Saat melampirkan proses dengan GDB, aplikasi yang sedang debugged tidak bisa diinterupsi.GDB hanya akan mengikat breakpoints saat aplikasi tidak berjalan (baik sebelum melampirkan ke aplikasi, atau saat aplikasi dalam keadaan berhenti). Hal ini disebabkan adanya bug di GDB .
- Inti dump tidak dapat dimuat saat melakukan debugging dengan GDB karena GDB tidak mendukung format dump inti yang digunakan di macos .
- Saat dilampirkan pada sebuah proses dengan GDB, break-all akan mengakhiri prosesnya.
Tags:
Tips