Share via


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.

Screenshot of the CMake startup items dropdown.

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 adalah Halo Dunia .exe.

Anda juga dapat memulai sesi debug dari Penjelajah Solusi. Pertama, beralihlah ke Tampilan Target CMake di jendela Penjelajah Solusi.

Screenshot of the CMake Targets View menu.

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.

Screenshot of the CMake Targets View debug option menu.

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 .

Screenshot of the CMake Debugger dropdown.

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. Mereka 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.

Screenshot of the Debug menu command Debug and launch settings for the project.

  • 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.

Screenshot of the Add Debug Configuration command on the shortcut menu for the target.

  • Root CMakeLists.txt: Klik kanan pada CMakeLists.txt akar 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 .

Screenshot of the Select a debugger dialog box.

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 di CMake Pengaturan.json

Untuk mereferensikan kunci apa pun dalam file CMake Pengaturan.json, sebelumnya cmake. di launch.vs.json. Contoh berikut menunjukkan file launch.vs.json sederhana yang menarik nilai remoteCopySources kunci dalam file CMake Pengaturan.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 CMake Pengaturan.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 CMake Pengaturan.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 adalah gdb. Visual Studio 2019 versi 16.7 atau yang lebih baru juga mendukung gdbserver.
  • 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 tempat program dijalankan. Direktori harus ada.
  • gdbpath: Default ke /usr/bin/gdb. Jalur Unix penuh ke yang gdb digunakan untuk men-debug. Hanya diperlukan jika menggunakan versi kustom .gdb
  • preDebugCommand: Perintah Linux untuk segera berjalan sebelum memanggil gdb. gdb tidak dimulai sampai perintah selesai. Anda dapat menggunakan opsi untuk menjalankan skrip sebelum eksekusi gdb.

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 tempat program dijalankan. Direktori harus ada.

  • gdbPath: Default ke ${debugInfo.vsInstalledGdb}. Jalur Windows penuh ke yang gdb digunakan untuk men-debug. Default ke yang gdb diinstal dengan pengembangan Linux dengan beban kerja C/C++.

  • gdbserverPath: Default ke usr/bin/gdbserver. Jalur Unix penuh ke yang gdbserver digunakan untuk men-debug.

  • preDebugCommand: Perintah Linux untuk segera berjalan sebelum memulai gdbserver. gdbserver tidak dimulai sampai perintah selesai.

Opsi penyebaran

Gunakan opsi berikut untuk memisahkan komputer build Anda (ditentukan dalam CMake Pengaturan.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 ke false. Menunjukkan apakah pemisahan build/debug dinonaktifkan. Ketika false, opsi ini memungkinkan build dan debug terjadi pada dua komputer terpisah.
  • deployDirectory: Jalur Unix penuh ke direktori tempat remoteMachineName 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 di sourceMachine.
    • targetPath: Lokasi file atau direktori di targetMachine.
    • deploymentType: Deskripsi jenis penyebaran. LocalRemote dan RemoteRemote didukung. LocalRemote berarti menyalin dari sistem file lokal ke sistem jarak jauh yang ditentukan oleh remoteMachineName dalam launch.vs.json. RemoteRemoteberarti menyalin dari sistem build jarak jauh yang ditentukan dalam CMake Pengaturan.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 tempat program 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 dan gdb. Sebagian besar array ini tidak perlu disesuaikan saat men-debug proyek CMake. Pengecualiannya adalah ${debuggerCommand}, yang diluncurkan gdb 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 dengan gdb pencetakan yang cantik. Atur showDisplayString juga ketika Anda mengatur properti ini.

  • showDisplayString: Boolean yang mengaktifkan string tampilan saat visualizerFile ditentukan. Mengatur opsi ini untuk true dapat menyebabkan performa yang lebih lambat selama penelusuran kesalahan.

  • setupCommands: Satu atau beberapa gdb perintah yang akan dijalankan, untuk menyiapkan debugger yang mendasar.

  • miDebuggerPath: Jalur lengkap ke gdb. Saat tidak ditentukan, Visual Studio mencari PATH terlebih dahulu untuk debugger.

  • Terakhir, semua opsi penyebaran yang ditentukan untuk cppgdb jenis konfigurasi juga dapat digunakan oleh cppdbg 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.