Bagikan melalui


Menggunakan Visual Studio Code untuk men-debug cmdlet yang dikompilasi

Panduan ini menunjukkan kepada Anda cara men-debug kode sumber C# secara interaktif untuk modul PowerShell yang dikompilasi menggunakan Visual Studio Code (VS Code) dan ekstensi C#.

Beberapa keakraban dengan debugger Visual Studio Code diasumsikan.

Panduan ini mengasumsikan Anda telah membaca dan mengikuti instruksi dalam panduan Menulis Modul Portabel.

Membuat tugas build

Bangun proyek Anda secara otomatis sebelum meluncurkan sesi debugging. Membangun ulang memastikan bahwa Anda mendapatkan versi terbaru dari kode Anda untuk debug.

Mengonfigurasi tugas build:

  1. Di Palet Perintah, jalankan perintah Konfigurasikan Tugas Build Default.

    Jalankan Tugas Build Default dengan Mengonfigurasi

  2. Dalam dialog Pilih tugas untuk mengonfigurasi, pilih Buat file tasks.json dari templat.

  3. Dalam dialog Pilih Templat Tugas, pilih .NET Core.

File tasks.json baru dibuat jika belum ada.

Untuk menguji tugas penyusunan Anda:

  1. Di Palet Perintah , jalankan perintah Jalankan Tugas Build.

  2. Di Pilih tugas build untuk menjalankan dialog, pilih build.

Informasi tentang file DLL yang dikunci

Secara default, build yang berhasil tidak menampilkan output di panel terminal. Jika Anda melihat output yang berisi teks file proyek tidak ada, Anda harus mengedit file tasks.json. Sertakan jalur eksplisit ke proyek C# yang dinyatakan sebagai "${workspaceFolder}/myModule". Dalam contoh ini, myModule adalah nama folder proyek. Entri ini harus mengejar entri build dalam daftar args sebagai berikut:

    {
        "label": "build",
        "command": "dotnet",
        "type": "shell",
        "args": [
            "build",
            "${workspaceFolder}/myModule",
            // Ask dotnet build to generate full paths for file names.
            "/property:GenerateFullPaths=true",
            // Do not generate summary otherwise it leads to duplicate errors in Problems panel
            "/consoleloggerparameters:NoSummary",
        ],
        "group": "build",
        "presentation": {
            "reveal": "silent"
        },
        "problemMatcher": "$msCompile"
    }

Saat debugging, modul DLL Anda diimpor ke dalam sesi PowerShell di terminal Visual Studio Code. DLL menjadi terkunci. Pesan berikut ditampilkan saat Anda menjalankan tugas build tanpa menutup sesi terminal:

Could not copy "obj\Debug\netstandard2.0\myModule.dll" to "bin\Debug\netstandard2.0\myModule.dll"`.

Sesi terminal harus ditutup sebelum Anda membangun kembali.

Menyiapkan debugger

Untuk men-debug cmdlet PowerShell, Anda perlu menyiapkan konfigurasi peluncuran kustom. Konfigurasi ini digunakan untuk:

  • Membangun kode sumber Anda
  • Mulai PowerShell dengan modul Anda termuat
  • Biarkan PowerShell terbuka di panel terminal

Saat Anda memanggil cmdlet Anda di sesi terminal, debugger berhenti pada titik henti apa pun yang diatur dalam kode sumber Anda.

Mengonfigurasi launch.json untuk PowerShell

  1. Instal ekstensi C# untuk Visual Studio Code

  2. Di panel Debug, tambahkan konfigurasi debug

  3. Dalam dialog Select environment, pilih .NET Core

  4. File launch.json dibuka di editor. Dengan kursor Anda di dalam array configurations, Anda akan melihat pemilih configuration. Jika Anda tidak melihat daftar ini, pilih Tambahkan Konfigurasi.

  5. Untuk membuat konfigurasi debug default, pilih Luncurkan Aplikasi Konsol .NET Core:

    Luncurkan Aplikasi Konsol .NET Core

  6. Edit bidang name, program, args, dan console sebagai berikut:

     {
         "name": "PowerShell cmdlets: pwsh",
         "type": "coreclr",
         "request": "launch",
         "preLaunchTask": "build",
         "program": "pwsh",
         "args": [
             "-NoExit",
             "-NoProfile",
             "-Command",
             "Import-Module ${workspaceFolder}/myModule/bin/Debug/netstandard2.0/myModule.dll",
         ],
         "cwd": "${workspaceFolder}",
         "stopAtEntry": false,
         "console": "integratedTerminal"
     }
    

Bidang program digunakan untuk meluncurkan pwsh sehingga cmdlet yang di-debug dapat dijalankan. Argumen -NoExit mencegah sesi PowerShell keluar segera setelah modul diimpor. Jalur dalam argumen Import-Module adalah jalur keluaran build default ketika Anda mengikuti panduan Menulis Modul Portabel. Jika Anda telah membuat manifes modul (.psd1 file), Anda harus menggunakan jalur untuk itu sebagai gantinya. Pemisah jalur / berfungsi di Windows, Linux, dan macOS. Anda harus menggunakan terminal terintegrasi untuk menjalankan perintah PowerShell yang ingin Anda debug.

Nota

Jika debugger tidak berhenti di titik henti apa pun, lihat di Konsol Debug Visual Studio Code untuk baris yang berbunyi:

Loaded '/path/to/myModule.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.

Jika Anda melihat ini, tambahkan "justMyCode": false ke konfigurasi peluncuran Anda (pada tingkat yang sama dengan "console": "integratedTerminal".

Mengonfigurasi launch.json untuk Windows PowerShell

Konfigurasi peluncuran ini berfungsi untuk menguji cmdlet Anda di Windows PowerShell (powershell.exe). Buat konfigurasi peluncuran kedua dengan perubahan berikut:

  1. name seharusnya PowerShell cmdlets: powershell

  2. type seharusnya clr

  3. program seharusnya powershell

    Ini akan terlihat seperti ini:

     {
         "name": "PowerShell cmdlets: powershell",
         "type": "clr",
         "request": "launch",
         "preLaunchTask": "build",
         "program": "powershell",
         "args": [
             "-NoExit",
             "-NoProfile",
             "-Command",
             "Import-Module ${workspaceFolder}/myModule/bin/Debug/netstandard2.0/myModule.dll",
         ],
         "cwd": "${workspaceFolder}",
         "stopAtEntry": false,
         "console": "integratedTerminal"
     }
    

Meluncurkan sesi penelusuran kesalahan

Sekarang semuanya siap untuk memulai debugging.

Anda dapat menelusuri kode sumber, memeriksa variabel, dan memeriksa tumpukan panggilan.

Untuk mengakhiri debugging, klik Hentikan di toolbar debug atau tekan Shift+F5. Shell yang ketika digunakan untuk debugging akan keluar dan melepaskan kunci pada file DLL yang dikompilasi.