Share via


Menyebarkan, menjalankan, dan menelusuri kesalahan proyek Linux MSBuild Anda

Dukungan Linux tersedia di Visual Studio 2017 dan yang lebih baru. Untuk melihat dokumentasi untuk versi ini, atur drop-down Versi yang terletak di atas daftar isi ke Visual Studio 2017 atau Visual Studio 2019.

Setelah Anda membuat proyek Linux C++ berbasis MSBuild di Visual Studio dan Anda telah terhubung ke proyek menggunakan Pengelola Sambungan Linux, Anda dapat menjalankan dan menelusuri kesalahan proyek. Anda mengompilasi, menjalankan, dan menelusuri kesalahan kode pada target jarak jauh.

Visual Studio 2019 versi 16.1 dan yang lebih baru: Anda dapat menargetkan sistem Linux yang berbeda untuk penelusuran kesalahan dan membangun. Misalnya, Anda dapat mengompilasi silang pada x64 dan menyebarkan ke perangkat ARM saat menargetkan skenario IoT. Untuk informasi selengkapnya, lihat Menentukan mesin yang berbeda untuk membangun dan menelusuri kesalahan nanti di artikel ini.

Ada beberapa cara untuk berinteraksi dengan dan menelusuri kesalahan proyek Linux Anda.

  • Debug menggunakan fitur Visual Studio tradisional, seperti titik henti, jendela tonton, dan arahkan mouse ke atas variabel. Dengan menggunakan metode ini, Anda dapat menelusuri kesalahan seperti biasanya untuk jenis proyek lain.

  • Lihat output dari komputer target di jendela Konsol Linux. Anda juga dapat menggunakan konsol untuk mengirim input ke komputer target.

Menelusuri kesalahan proyek Linux Anda

  1. Pilih mode penelusuran kesalahan di halaman properti Penelusuran Kesalahan.

    GDB digunakan untuk menelusuri kesalahan aplikasi yang berjalan di Linux. Saat menelusuri kesalahan pada sistem jarak jauh (bukan WSL), GDB dapat berjalan dalam dua mode berbeda, yang dapat dipilih dari opsi Mode Penelusuran Kesalahan di halaman properti Penelusuran Kesalahan proyek:

    Cuplikan layar kotak dialog Halaman Properti Aplikasi Konsol Linux Visual Studio dengan Penelusuran Kesalahan Properti > Konfigurasi dipilih dan Mode Debugging disorot dengan G D B dipilih dan disorot dari daftar dropdown.

    GDB digunakan untuk menelusuri kesalahan aplikasi yang berjalan di Linux. GDB dapat berjalan dalam dua mode berbeda, yang dapat dipilih dari opsi Mode Penelusuran Kesalahan di halaman properti Penelusuran Kesalahan proyek:

    Cuplikan layar kotak dialog Halaman Properti Aplikasi Konsol Linux Visual Studio 2017 dengan Penelusuran Kesalahan Properti > Konfigurasi dipilih dan Mode Penelusuran Kesalahan disorot dengan G D B dipilih dan disorot dari daftar dropdown.

    • Dalam mode gdbserver , GDB dijalankan secara lokal, yang terhubung ke gdbserver pada sistem jarak jauh.

    • Dalam mode gdb, Visual Studio debugger mendorong GDB pada sistem jarak jauh. Ini adalah opsi yang lebih baik jika versi lokal GDB tidak kompatibel dengan versi yang diinstal pada komputer target. Ini adalah satu-satunya mode yang didukung jendela Konsol Linux.

    Catatan

    Jika Anda tidak dapat mencapai titik henti dalam mode penelusuran kesalahan gdbserver, coba mode gdb. gdb harus diinstal terlebih dahulu pada target jarak jauh.

  2. Pilih target jarak jauh menggunakan bilah alat Debug standar di Visual Studio.

    Saat target jarak jauh tersedia, Anda akan melihatnya tercantum dengan nama atau alamat IP.

    Cuplikan layar memperlihatkan alamat IP target jarak jauh.

    Jika Anda belum terhubung ke target jarak jauh, Anda akan melihat instruksi untuk menggunakan Linux Connection Manager untuk terhubung ke target jarak jauh.

    Cuplikan layar memperlihatkan Arsitektur Jarak Jauh, yaitu x64.

  3. Tetapkan breakpoint dengan mengklik di bagian kiri dari beberapa kode yang Anda tahu akan dieksekusi.

    Titik merah muncul di baris kode tempat Anda menyetel breakpoint.

  4. Tekan F5 (atau Debug > Mulai Penelusuran Kesalahan) untuk memulai menelusuri kesalahan

    Saat Anda memulai menelusuri kesalahan, aplikasi dikompilasi pada target jarak jauh sebelum dimulai. Kesalahan kompilasi apa pun akan muncul di jendela Daftar Kesalahan.

    Jika tidak ada kesalahan, aplikasi akan mulai dan debugger akan berhenti di breakpoint.

    Cuplikan layar yang menunjukkan aplikasi telah mencapai titik henti.

    Sekarang, Anda dapat berinteraksi dengan aplikasi dalam statusnya saat ini, melihat variabel, dan menelusuri kode dengan menekan tombol perintah seperti F10 atau F11.

  5. Jika Anda ingin menggunakan Konsol Linux untuk berinteraksi dengan aplikasi Anda, pilih Debug > Konsol Linux.

    Cuplikan layar memperlihatkan item menu Konsol Linux.

    Konsol ini akan menampilkan output konsol apa pun dari komputer target dan mengambil input dan mengirimkannya ke komputer target.

    Cuplikan layar memperlihatkan jendela Konsol Linux.

Mengonfigurasi opsi penelusuran kesalahan lainnya (proyek MSBuild)

  • Argumen baris perintah dapat diteruskan ke file yang dapat dieksekusi menggunakan item Argumen Program di halaman properti Penelusuran Kesalahan proyek.

  • Anda dapat mengekspor DISPLAY variabel lingkungan dengan menggunakan Perintah Prapeluncuran di halaman properti Penelusuran Kesalahan proyek. Misalnya: export DISPLAY=:0.0

    Cuplikan layar memperlihatkan properti Argumen Program dalam dialog Halaman Properti.

  • Opsi debugger tertentu dapat diteruskan ke GDB menggunakan entri Perintah Debugger Tambahan. Misalnya, Anda mungkin ingin mengabaikan sinyal SIGILL (instruksi ilegal). Anda dapat menggunakan perintah handle untuk mencapainya dengan menambahkan yang berikut ini ke entri Perintah Debugger Tambahan seperti yang ditunjukkan di atas:

    handle SIGILL nostop noprint

  • Anda dapat menentukan jalur ke GDB yang digunakan oleh Visual Studio menggunakan item Jalur GDB di halaman properti Penelusuran Kesalahan proyek. Properti ini tersedia di Visual Studio 2019 versi 16.9 dan yang lebih baru.

Debug dengan Lampirkan ke Proses

Halaman properti Penelusuran Kesalahan untuk proyek Visual Studio, dan setelan Launch.vs.json untuk proyek CMake, memiliki setelan yang memungkinkan Anda untuk melampirkan ke proses yang sedang berjalan. Jika Anda memerlukan lebih banyak kontrol di luar apa yang disediakan dalam pengaturan tersebut, Anda dapat menempatkan file bernama Microsoft.MIEngine.Options.xml di akar solusi atau ruang kerja Anda. Berikut contoh sederhana.

<?xml version="1.0" encoding="utf-8"?>
<SupplementalLaunchOptions>
    <AttachOptions>
      <AttachOptionsForConnection AdditionalSOLibSearchPath="/home/user/solibs">
        <ServerOptions MIDebuggerPath="C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\Common7\IDE\VC\Linux\bin\gdb\7.9\x86_64-linux-gnu-gdb.exe"
ExePath="C:\temp\ConsoleApplication17\ConsoleApplication17\bin\x64\Debug\ConsoleApplication17.out"/>
        <SetupCommands>
          <Command IgnoreFailures="true">-enable-pretty-printing</Command>
        </SetupCommands>
      </AttachOptionsForConnection>
    </AttachOptions>
</SupplementalLaunchOptions>

AttachOptionsForConnection memiliki sebagian besar atribut yang mungkin Anda perlukan. Contoh di atas menunjukkan cara menentukan lokasi untuk mencari lebih banyak pustaka .so. Elemen turunan ServerOptions memungkinkan pemasangan ke proses jarak jauh dengan gdbserver sebagai gantinya. Untuk melakukannya, Anda perlu menentukan klien gdb lokal (yang dikirimkan dalam Visual Studio 2017 ditunjukkan di atas) dan salinan biner lokal dengan simbol. Elemen SetupCommands memungkinkan Anda meneruskan perintah langsung ke gdb. Anda dapat menemukan semua opsi yang tersedia di skema LaunchOptions.xsd di GitHub.

Tentukan komputer yang berbeda untuk membangun dan menelusuri kesalahan dalam proyek Linux berbasis MSBuild

Anda dapat memisahkan komputer build jarak jauh dari komputer debug jarak jauh untuk proyek Linux berbasis MSBuild dan proyek CMake yang menargetkan komputer Linux jarak jauh. Misalnya, Anda sekarang dapat mengompilasi silang pada x64 dan menyebarkan ke perangkat ARM saat menargetkan skenario IoT.

Secara default, mesin debug jarak jauh sama dengan mesin pembangunan jarak jauh (Properti Konfigurasi>Umum>Mesin Pembuatan Jarak Jauh). Untuk menentukan mesin debug jarak jauh baru, klik kanan proyek di Solution Explorer dan buka Properti Konfigurasi>Penelusuran Kesalahan> Mesin Debug Jarak Jauh.

Cuplikan layar memperlihatkan properti komputer debug jarak jauh Linux dalam dialog Halaman Properti yang memperlihatkan nama pengguna, jenis autentikasi, dan port.

Menu drop-down untuk Komputer Debug Jarak Jauh diisi dengan semua koneksi jarak jauh yang dibuat. Untuk menambahkan sambungan jarak jauh baru, navigasikan ke Alat>Opsi>Cross Platform>Pengelola Sambungan atau telusuri untuk "Pengelola Koneksi" di Peluncuran Cepat. Anda juga dapat menentukan direktori penerapan jarak jauh baru di Halaman Properti proyek (Properti Konfigurasi>Umum>Direktori Penerapan Jarak Jauh).

Secara default, hanya file yang diperlukan untuk proses debug yang akan disebarkan ke komputer debug jarak jauh. Anda dapat menggunakan Penjelajah Solusi untuk mengonfigurasi file sumber mana yang akan disebarkan ke komputer debug jarak jauh. Saat mengeklik file sumber, Anda akan melihat pratinjau Properti Filenya tepat di bawah Penjelajah Solusi.

Cuplikan layar memperlihatkan properti file main.cpp dengan konten properti = False disorot.

Properti Konten menentukan apakah file akan disebarkan ke komputer debug jarak jauh. Anda dapat menonaktifkan penerapan sepenuhnya dengan menavigasi ke Halaman Properti>Pengelola Konfigurasi dan menghapus centang Menyebarkan untuk konfigurasi yang diinginkan.

Dalam beberapa kasus, Anda mungkin memerlukan kontrol lebih besar atas penyebaran proyek Anda. Misalnya, beberapa file yang ingin Anda sebarkan mungkin berada di luar solusi Anda atau Anda ingin menyesuaikan direktori penyebaran jarak jauh Per file atau direktori. Dalam kasus ini, tambahkan blok kode berikut ke file .vcxproj Anda dan ganti "example.cpp" dengan nama file yang sebenarnya:


<ItemGroup>
   <RemoteDeploy Include="__example.cpp">
<!-- This is the source Linux machine, can be empty if DeploymentType is LocalRemote -->
      <SourceMachine>$(RemoteTarget)</SourceMachine>
      <TargetMachine>$(RemoteDebuggingTarget)</TargetMachine>
      <SourcePath>~/example.cpp</SourcePath>
      <TargetPath>~/example.cpp</TargetPath>
<!-- DeploymentType can be LocalRemote, in which case SourceMachine will be empty and SourcePath is a local file on Windows -->
      <DeploymentType>RemoteRemote</DeploymentType>
<!-- Indicates whether the deployment contains executables -->
      <Executable>true</Executable>
   </RemoteDeploy>
</ItemGroup>

Proyek CMake

Untuk proyek CMake yang menargetkan komputer Linux jarak jauh, Anda dapat menentukan komputer debug jarak jauh baru di launch.vs.json. Secara default, nilai "remoteMachineName" disinkronkan dengan properti "remoteMachineName" di CMakeSettings.json, yang sesuai dengan komputer build jarak jauh Anda. Properti ini tidak perlu lagi cocok, dan nilai "remoteMachineName" di launch.vs.json akan menentukan komputer jarak jauh mana yang digunakan untuk penyebaran dan debug.

Komputer debug jarak jauh CMake yang ditentukan dalam file launch_schema.json. Nama Komputer jarak jauh adalah ${debugInfo . remoteMachineName}

IntelliSense akan menyarankan semua daftar semua koneksi jarak jauh yang dibuat. Anda dapat menambahkan koneksi jarak jauh baru dengan menavigasi ke Alat>Opsi>Cross Platform>Connection Manager atau mencari "Pengelola Koneksi" di Peluncuran Cepat.

Jika Anda ingin kontrol penuh atas penyebaran, Anda dapat menambahkan blok kode berikut ke file launch.vs.json. Ingatlah untuk mengganti nilai tempat penampung dengan nilai Anda sendiri.

"disableDeploy": false,
"deployDirectory": "~\foo",
"deploy" : [
   {
      "sourceMachine": "127.0.0.1 (username=example1, port=22, authentication=Password)",
      "targetMachine": "192.0.0.1 (username=example2, port=22, authentication=Password)",
      "sourcePath": "~/example.cpp",
      "targetPath": "~/example.cpp",
      "executable": "false"
   }
]

Langkah berikutnya

Lihat juga

Properti Penelusuran Kesalahan C++ (Linux C++)