Mengonfigurasi sesi debugging CMake
Dukungan CMake asli tersedia di Visual Studio 2017 dan yang lebih baru. Untuk melihat dokumentasi untuk versi ini, atur kontrol pemilih Versi Visual Studio untuk artikel ini ke Visual Studio 2017 atau yang lebih baru. Kontrol tersebut dapat ditemukan di bagian atas daftar isi pada halaman ini.
Semua target CMake yang dapat dieksekusi ditampilkan di menu dropdown Item Startup di toolbar. Pilih salah satu untuk memulai sesi penelusuran kesalahan dan meluncurkan debugger.
Dropdown menyediakan daftar target debug untuk dipilih. Item yang dipilih muncul sebagai tombol putar diikuti dengan nama target debug yang dipilih untuk dijalankan. Dalam contoh ini, target debug yang dipilih Halo Dunia .exe.
Anda juga dapat memulai sesi debug dari Penjelajah Solusi. Pertama, beralihlah ke Tampilan Target CMake di jendela Penjelajah Solusi.
Penjelajah solusi ditampilkan. Klik kanan pada item di Tampilan Folder telah membuka menu yang memperlihatkan opsi seperti Buka, Buka dengan, Bandingkan dengan, dan sebagainya. Item menu Beralih ke Tampilan Target disorot.
Kemudian, klik kanan pada executable dan pilih Debug. Perintah ini secara otomatis mulai men-debug target yang dipilih berdasarkan konfigurasi aktif Anda.
Klik kanan pada target dalam tampilan Target CMake telah membuka menu dengan opsi seperti Atur sebagai item Startup, Build, Clean All, dan sebagainya. Opsi menu Debug disorot.
Mulai dari Visual Studio 2022 Versi 17.6, Anda juga dapat memulai sesi penelusuran kesalahan pada file CMakeLists.txt Anda. Untuk melakukannya, cukup atur titik henti di file CMakeLists.txt Anda dan jalankan Konfigurasi proyek dengan CMake Debugger dari dropdown Proyek .
Dropdown Proyek ditampilkan. Opsi menu untuk Mengonfigurasi Project dengan debugger CMake disorot.
Menyesuaikan pengaturan debugger
Anda dapat menyesuaikan pengaturan debugger untuk target CMake yang dapat dieksekusi dalam proyek Anda. File tersebut ditemukan dalam file konfigurasi yang disebut launch.vs.json, yang terletak di .vs
folder di akar proyek Anda. File konfigurasi peluncuran berguna dalam sebagian besar skenario penelusuran kesalahan, karena Anda dapat mengonfigurasi dan menyimpan detail penyiapan penelusuran kesalahan Anda. Ada tiga titik masuk ke file ini:
- Menu Debug: Pilih Debug > Debug dan Luncurkan Pengaturan untuk ${activeDebugTarget} dari menu utama untuk menyesuaikan konfigurasi debug khusus untuk target debug aktif Anda. Jika Anda tidak memilih target debug, opsi ini berwarna abu-abu.
- Tampilan Target: Navigasi ke Tampilan Target di Penjelajah Solusi. Kemudian, klik kanan pada target debug dan pilih Tambahkan Konfigurasi Debug untuk menyesuaikan konfigurasi debug khusus untuk target yang dipilih.
- Root CMakeLists.txt: Klik kanan pada CMakeLists.txt root dan pilih Tambahkan Konfigurasi Debug untuk membuka kotak dialog Pilih Debugger. Dialog memungkinkan Anda menambahkan semua jenis konfigurasi debug, tetapi Anda harus menentukan target CMake secara manual untuk dipanggil melalui
projectTarget
properti .
Anda dapat mengedit file launch.vs.json untuk membuat konfigurasi debug untuk sejumlah target CMake. Saat Anda menyimpan file, Visual Studio membuat entri untuk setiap konfigurasi baru di menu dropdown Item Startup.
Kunci referensi dalam CMakeSettings.json
Untuk mereferensikan kunci apa pun dalam file CMakeSettings.json , tambahkan cmake.
sebelumnya di launch.vs.json. Contoh berikut menunjukkan file launch.vs.json sederhana yang menarik nilai remoteCopySources
kunci dalam file CMakeSettings.json untuk konfigurasi yang saat ini dipilih:
{
"version": "0.2.1",
"configurations": [
{
"type": "default",
"project": "CMakeLists.txt",
"projectTarget": "CMakeHelloWorld.exe (Debug\\CMakeHelloWorld.exe)",
"name": "CMakeHelloWorld.exe (Debug\\CMakeHelloWorld.exe)",
"args": ["${cmake.remoteCopySources}"]
}
]
}
Variabel lingkungan yang ditentukan dalam CMakeSettings.json juga dapat digunakan dalam launch.vs.json menggunakan sintaks ${env.VARIABLE_NAME}
. Di Visual Studio 2019 versi 16.4 dan yang lebih baru, target debug secara otomatis diluncurkan menggunakan lingkungan yang Anda tentukan di CMakeSettings.json. Anda dapat membatalkan set variabel lingkungan dengan mengaturnya ke null.
referensi Launch.vs.json
Ada banyak properti launch.vs.json untuk mendukung semua skenario penelusuran kesalahan Anda. Properti berikut umum untuk semua konfigurasi debug, baik jarak jauh maupun lokal:
projectTarget
: Menentukan target CMake yang akan dipanggil saat membangun proyek. Visual Studio secara otomatis mengisi properti ini jika Anda memasukkan launch.vs.json dari Menu Debug atau Tampilan Target. Nilai ini harus cocok dengan nama target debug yang ada yang tercantum di menu dropdown Item Startup.env
: Variabel lingkungan tambahan untuk ditambahkan menggunakan sintaks:"env": { "DEBUG_LOGGING_LEVEL": "trace;info", "ENABLE_TRACING": "true" }
args
: Argumen baris perintah diteruskan ke program untuk debug.
referensi Launch.vs.json untuk proyek jarak jauh dan WSL
Di Visual Studio 2019 versi 16.6, kami menambahkan konfigurasi type: cppgdb
debug baru untuk menyederhanakan penelusuran kesalahan pada sistem jarak jauh dan WSL. Konfigurasi debug lama type: cppdbg
masih didukung.
Jenis konfigurasi cppgdb
name
: Nama yang mudah diingat untuk mengidentifikasi konfigurasi di menu dropdown Item Startup.project
: Menentukan jalur relatif ke file proyek. Biasanya, Anda tidak perlu mengubah jalur ini saat men-debug proyek CMake.projectTarget
: Menentukan target CMake yang akan dipanggil saat membangun proyek. Visual Studio secara otomatis mengisi properti ini jika Anda memasukkan launch.vs.json dari Menu Debug atau Tampilan Target. Nilai target ini harus cocok dengan nama target debug yang ada yang tercantum dalam menu dropdown Item Startup.debuggerConfiguration
: Menunjukkan kumpulan nilai default debugging mana yang akan digunakan. Di Visual Studio 2019 versi 16.6, satu-satunya opsi yang valid adalahgdb
. Visual Studio 2019 versi 16.7 atau yang lebih baru juga mendukunggdbserver
.args
: Argumen baris perintah diteruskan saat memulai ke program yang sedang di-debug.env
: Variabel lingkungan tambahan yang diteruskan ke program yang sedang di-debug. Contohnya,{"DISPLAY": "0.0"}
.processID
: ID proses Linux untuk dilampirkan. Hanya digunakan saat melampirkan ke proses jarak jauh. Untuk informasi selengkapnya, lihat Memecahkan masalah melampirkan ke proses menggunakan GDB.
Opsi tambahan untuk gdb
konfigurasi
program
: Default ke"${debugInfo.fullTargetPath}"
. Jalur Unix ke aplikasi yang akan di-debug. Hanya diperlukan jika berbeda dari target yang dapat dieksekusi di lokasi build atau penyebaran.remoteMachineName
: Default ke"${debugInfo.remoteMachineName}"
. Nama sistem jarak jauh yang menghosting program untuk di-debug. Hanya diperlukan jika berbeda dari sistem build. Harus memiliki entri yang ada di Pengelola Sambungan. Tekan Ctrl+Spasi untuk melihat daftar semua koneksi jarak jauh yang ada.cwd
: Default ke"${debugInfo.defaultWorkingDirectory}"
. Jalur Unix ke direktori pada sistem jarak jauh tempatprogram
dijalankan. Direktori harus ada.gdbpath
: Default ke/usr/bin/gdb
. Jalur Unix penuh ke yanggdb
digunakan untuk men-debug. Hanya diperlukan jika menggunakan versi kustom .gdb
preDebugCommand
: Perintah Linux untuk segera berjalan sebelum memanggilgdb
.gdb
tidak dimulai sampai perintah selesai. Anda dapat menggunakan opsi untuk menjalankan skrip sebelum eksekusigdb
.
Opsi tambahan yang gdbserver
diizinkan dengan konfigurasi (16.7 atau yang lebih baru)
program
: Default ke"${debugInfo.fullTargetPath}"
. Jalur Unix ke aplikasi yang akan di-debug. Hanya diperlukan jika berbeda dari target yang dapat dieksekusi di lokasi build atau penyebaran.Tip
Penyebaran belum didukung untuk skenario kompilasi silang lokal. Jika Anda mengkompilasi silang di Windows (misalnya, menggunakan pengkompilasi silang di Windows untuk membangun Linux ARM yang dapat dieksekusi) maka Anda harus menyalin biner secara manual ke lokasi yang ditentukan oleh
program
pada komputer ARM jarak jauh sebelum debugging.remoteMachineName
: Default ke"${debugInfo.remoteMachineName}"
. Nama sistem jarak jauh yang menghosting program untuk di-debug. Hanya diperlukan jika berbeda dari sistem build. Harus memiliki entri yang ada di Pengelola Sambungan. Tekan Ctrl+Spasi untuk melihat daftar semua koneksi jarak jauh yang ada.cwd
: Default ke"${debugInfo.defaultWorkingDirectory}"
. Jalur Unix penuh ke direktori pada sistem jarak jauh tempatprogram
dijalankan. Direktori harus ada.gdbPath
: Default ke${debugInfo.vsInstalledGdb}
. Jalur Windows penuh ke yanggdb
digunakan untuk men-debug. Default ke yanggdb
diinstal dengan pengembangan Linux dengan beban kerja C/C++.gdbserverPath
: Default keusr/bin/gdbserver
. Jalur Unix penuh ke yanggdbserver
digunakan untuk men-debug.preDebugCommand
: Perintah Linux untuk segera berjalan sebelum memulaigdbserver
.gdbserver
tidak dimulai sampai perintah selesai.
Opsi penyebaran
Gunakan opsi berikut untuk memisahkan komputer build Anda (ditentukan dalam CMakeSettings.json) dari komputer debug jarak jauh Anda.
remoteMachineName
: Komputer debug jarak jauh. Hanya diperlukan jika berbeda dari komputer build. Harus memiliki entri yang ada di Pengelola Sambungan. Tekan Ctrl+Spasi untuk melihat daftar semua koneksi jarak jauh yang ada.disableDeploy
: Default kefalse
. Menunjukkan apakah pemisahan build/debug dinonaktifkan. Ketikafalse
, opsi ini memungkinkan build dan debug terjadi pada dua komputer terpisah.deployDirectory
: Jalur Unix penuh ke direktori tempatremoteMachineName
executable disalin.deploy
: Array pengaturan penyebaran tingkat lanjut. Anda hanya perlu mengonfigurasi pengaturan ini ketika Anda menginginkan kontrol yang lebih terperinci atas proses penyebaran. Secara default, hanya file yang diperlukan agar proses debug disebarkan ke komputer debug jarak jauh.sourceMachine
: Komputer tempat file atau direktori disalin. Tekan Ctrl+Spasi untuk melihat daftar semua koneksi jarak jauh yang disimpan dalam Pengelola Sambungan. Saat membangun secara asli di WSL, opsi ini diabaikan.targetMachine
: Komputer tempat file atau direktori disalin. Tekan Ctrl+Spasi untuk melihat daftar semua koneksi jarak jauh yang disimpan dalam Pengelola Sambungan.sourcePath
: Lokasi file atau direktori disourceMachine
.targetPath
: Lokasi file atau direktori ditargetMachine
.deploymentType
: Deskripsi jenis penyebaran.LocalRemote
danRemoteRemote
didukung.LocalRemote
berarti menyalin dari sistem file lokal ke sistem jarak jauh yang ditentukan olehremoteMachineName
dalam launch.vs.json.RemoteRemote
berarti menyalin dari sistem build jarak jauh yang ditentukan dalam CMakeSettings.json ke berbagai sistem jarak jauh yang ditentukan dalam launch.vs.json.executable
: Menunjukkan apakah file yang disebarkan dapat dieksekusi.
Menjalankan perintah kustom gdb
Visual Studio mendukung eksekusi perintah kustom gdb
untuk berinteraksi dengan debugger yang mendasar secara langsung. Untuk informasi selengkapnya, lihat Menjalankan perintah lldb kustomgdb
.
Aktifkan pencatatan log
Aktifkan pengelogan MIEngine untuk melihat perintah apa yang dikirim ke gdb
, output gdb
apa yang dikembalikan, dan berapa lama setiap perintah mengambil. Pelajari lebih lanjut
Jenis konfigurasi cppdbg
Opsi berikut dapat digunakan saat penelusuran kesalahan pada sistem jarak jauh atau WSL menggunakan cppdbg
jenis konfigurasi. Di Visual Studio 2019 versi 16.6 atau yang lebih baru, jenis cppgdb
konfigurasi disarankan.
name
: Nama yang mudah diingat untuk mengidentifikasi konfigurasi di menu dropdown Item Startup.project
: Menentukan jalur relatif ke file proyek. Biasanya, Anda tidak perlu mengubah nilai ini saat men-debug proyek CMake.projectTarget
: Menentukan target CMake yang akan dipanggil saat membangun proyek. Visual Studio secara otomatis mengisi properti ini jika Anda memasukkan launch.vs.json dari Menu Debug atau Tampilan Target. Nilai ini harus cocok dengan nama target debug yang ada yang tercantum di menu dropdown Item Startup.args
: Argumen baris perintah diteruskan saat memulai ke program yang sedang di-debug.processID
: ID proses Linux untuk dilampirkan. Hanya digunakan saat melampirkan ke proses jarak jauh. Untuk informasi selengkapnya, lihat Memecahkan masalah melampirkan ke proses menggunakan GDB.program
: Default ke"${debugInfo.fullTargetPath}"
. Jalur Unix ke aplikasi yang akan di-debug. Hanya diperlukan jika berbeda dari target yang dapat dieksekusi di lokasi build atau penyebaran.remoteMachineName
: Default ke"${debugInfo.remoteMachineName}"
. Nama sistem jarak jauh yang menghosting program untuk di-debug. Hanya diperlukan jika berbeda dari sistem build. Harus memiliki entri yang ada di Pengelola Sambungan. Tekan Ctrl+Spasi untuk melihat daftar semua koneksi jarak jauh yang ada.cwd
: Default ke"${debugInfo.defaultWorkingDirectory}"
. Jalur Unix penuh ke direktori pada sistem jarak jauh tempatprogram
dijalankan. Direktori harus ada.environment
: Variabel lingkungan tambahan yang diteruskan ke program yang sedang di-debug. Contohnya,"environment": [ { "name": "ENV1", "value": "envvalue1" }, { "name": "ENV2", "value": "envvalue2" } ]
pipeArgs
: Array argumen baris perintah yang diteruskan ke program pipa untuk mengonfigurasi koneksi. Program pipa digunakan untuk menyampaikan input/output standar antara Visual Studio dangdb
. Sebagian besar array ini tidak perlu disesuaikan saat men-debug proyek CMake. Pengecualiannya adalah${debuggerCommand}
, yang diluncurkangdb
pada sistem jarak jauh. Ini dapat dimodifikasi untuk:Ekspor nilai VARIABEL lingkungan DISPLAY pada sistem Linux Anda. Dalam contoh berikut, nilai ini adalah
:1
."pipeArgs": [ "/s", "${debugInfo.remoteMachineId}", "/p", "${debugInfo.parentProcessId}", "/c", "export DISPLAY=:1;${debuggerCommand}", "--tty=${debugInfo.tty}" ],
Jalankan skrip sebelum eksekusi
gdb
. Pastikan izin eksekusi diatur pada skrip Anda."pipeArgs": [ "/s", "${debugInfo.remoteMachineId}", "/p", "${debugInfo.parentProcessId}", "/c", "/path/to/script.sh;${debuggerCommand}", "--tty=${debugInfo.tty}" ],
stopOnEntry
: Boolean yang menentukan apakah akan rusak segera setelah proses diluncurkan. Defaultnya adalah false.visualizerFile
: File .natvis yang akan digunakan saat men-debug proses ini. Opsi ini tidak kompatibel dengangdb
pencetakan yang cantik. AturshowDisplayString
juga ketika Anda mengatur properti ini.showDisplayString
: Boolean yang mengaktifkan string tampilan saatvisualizerFile
ditentukan. Mengatur opsi ini untuktrue
dapat menyebabkan performa yang lebih lambat selama penelusuran kesalahan.setupCommands
: Satu atau beberapagdb
perintah yang akan dijalankan, untuk menyiapkan debugger yang mendasar.miDebuggerPath
: Jalur lengkap kegdb
. Saat tidak ditentukan, Visual Studio mencari PATH terlebih dahulu untuk debugger.Terakhir, semua opsi penyebaran yang ditentukan untuk
cppgdb
jenis konfigurasi juga dapat digunakan olehcppdbg
jenis konfigurasi.
Debug menggunakan gdbserver
Anda dapat mengonfigurasi cppdbg
konfigurasi untuk men-debug menggunakan gdbserver
. Anda dapat menemukan detail selengkapnya dan konfigurasi peluncuran sampel di posting Blog Tim C++ Microsoft Debugging Linux CMake Projects dengan gdbserver
.
Lihat juga
Proyek CMake di Visual Studio
Mengonfigurasi proyek CMake Linux
Menyambungkan ke komputer Linux jarak jauh Anda
Menyesuaikan pengaturan build CMake
Mengonfigurasi sesi penelusuran kesalahan CMake
Menyebarkan, menjalankan, dan men-debug proyek Linux Anda
Referensi konfigurasi CMake yang telah ditentukan sebelumnya