ค้นหาเว็บไซต์

การใช้ Visual Studio Code เพื่อดีบัก cmdlets ที่คอมไพล์แล้ว


คู่มือนี้จะแสดงวิธีการดีบักซอร์สโค้ด C# แบบโต้ตอบสำหรับโมดูล PowerShell ที่คอมไพล์แล้วโดยใช้ Visual Studio Code (VS Code) และส่วนขยาย C#

ถือว่ามีความคุ้นเคยกับดีบักเกอร์ Visual Studio Code บ้าง

  • สำหรับคำแนะนำทั่วไปเกี่ยวกับดีบักเกอร์ VS Code โปรดดูที่ การดีบักใน Visual Studio Code

  • สำหรับตัวอย่างของการดีบักไฟล์สคริปต์และโมดูล PowerShell โปรดดูที่ การใช้โค้ด Visual Studio สำหรับการแก้ไขและการดีบักจากระยะไกล

คู่มือนี้ถือว่าคุณได้อ่านและปฏิบัติตามคำแนะนำในคู่มือการเขียนโมดูลแบบพกพาแล้ว

การสร้างงานสร้าง

สร้างโปรเจ็กต์ของคุณโดยอัตโนมัติก่อนที่จะเริ่มเซสชั่นการแก้ไขจุดบกพร่อง การสร้างใหม่ช่วยให้แน่ใจว่าคุณจะดีบักโค้ดเวอร์ชันล่าสุดของคุณ

กำหนดค่างานบิลด์:

  1. ใน ชุดคำสั่ง ให้เรียกใช้คำสั่ง กำหนดค่างานการสร้างเริ่มต้น

    เรียกใช้กำหนดค่างานสร้างเริ่มต้น

  2. ในกล่องโต้ตอบ เลือกงานที่จะกำหนดค่า ให้เลือก สร้างไฟล์ Tasks.json จากเทมเพลต

  3. ในกล่องโต้ตอบ เลือกเทมเพลตงาน ให้เลือก .NET Core

ไฟล์ tasks.json ใหม่จะถูกสร้างขึ้นหากยังไม่มี

หากต้องการทดสอบงานสร้างของคุณ:

  1. ใน Command Palette ให้เรียกใช้คำสั่ง Run Build Task

  2. ในกล่องโต้ตอบ เลือกงานสร้างที่จะเรียกใช้ ให้เลือก สร้าง

ข้อมูลเกี่ยวกับไฟล์ DLL ที่ถูกล็อค

ตามค่าเริ่มต้น การสร้างที่สำเร็จจะไม่แสดงเอาต์พุตในบานหน้าต่างเทอร์มินัล หากคุณเห็นเอาต์พุตที่มีข้อความ ไม่มีไฟล์โครงการ คุณควรแก้ไขไฟล์ tasks.json รวมเส้นทางที่ชัดเจนไปยังโครงการ C# ที่แสดงเป็น "$ {workspaceFolder}/myModule" ในตัวอย่างนี้ myModule คือชื่อของโฟลเดอร์โครงการ รายการนี้จะต้องอยู่หลังรายการ build ในรายการ args ดังนี้:

    {
        "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"
    }

เมื่อทำการดีบัก โมดูล DLL ของคุณจะถูกนำเข้าไปยังเซสชัน PowerShell ในเทอร์มินัล VS Code DLL จะถูกล็อค ข้อความต่อไปนี้จะปรากฏขึ้นเมื่อคุณรันงาน build โดยไม่ต้องปิดเซสชันเทอร์มินัล:

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

ต้องปิดเซสชันเทอร์มินัลก่อนที่คุณจะสร้างใหม่

การตั้งค่าดีบักเกอร์

หากต้องการดีบัก PowerShell cmdlet คุณต้องตั้งค่าการกำหนดค่าการเปิดใช้แบบกำหนดเอง การกำหนดค่านี้ใช้เพื่อ:

  • สร้างซอร์สโค้ดของคุณ
  • เริ่ม PowerShell โดยโหลดโมดูลของคุณแล้ว
  • เปิด PowerShell ทิ้งไว้ในบานหน้าต่างเทอร์มินัล

เมื่อคุณเรียกใช้ cmdlet ของคุณในเซสชันเทอร์มินัล ดีบักเกอร์จะหยุดที่จุดพักใดๆ ที่ตั้งค่าไว้ในซอร์สโค้ดของคุณ

การกำหนดค่า launch.json สำหรับ PowerShell

  1. ติดตั้งส่วนขยาย C# สำหรับ Visual Studio Code

  2. ในบานหน้าต่างการแก้ไขข้อบกพร่อง ให้เพิ่มการกำหนดค่าการแก้ไขข้อบกพร่อง

  3. ในกล่องโต้ตอบ เลือกสภาพแวดล้อม ให้เลือก .NET Core

  4. ไฟล์ launch.json ถูกเปิดในตัวแก้ไข เมื่อเคอร์เซอร์ของคุณอยู่ในอาร์เรย์ configurations คุณจะเห็นตัวเลือก configuration หากคุณไม่เห็นรายการนี้ ให้เลือก เพิ่มการกำหนดค่า

  5. หากต้องการสร้างการกำหนดค่าการแก้ไขข้อบกพร่องเริ่มต้น ให้เลือก เปิดแอป .NET Core Console:

    เปิดแอป .NET Core Console

  6. แก้ไขฟิลด์ name, program, args และ console ดังนี้:

     {
         "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"
     }
    

ช่อง program ใช้เพื่อเปิดใช้ pwsh เพื่อให้สามารถเรียกใช้ cmdlet ที่กำลังดีบั๊กได้ อาร์กิวเมนต์ -NoExit ป้องกันไม่ให้เซสชัน PowerShell ออกจากทันทีที่นำเข้าโมดูล เส้นทางในอาร์กิวเมนต์ Import-Module คือเส้นทางเอาต์พุตของ build เริ่มต้นเมื่อคุณทำตามคำแนะนำ Writing Portable Modules หากคุณได้สร้างรายการโมดูล (ไฟล์ .psd1) คุณควรใช้เส้นทางไปยังไฟล์นั้นแทน ตัวคั่นเส้นทาง / ทำงานบน Windows, Linux และ macOS คุณต้องใช้เทอร์มินัลรวมเพื่อรันคำสั่ง PowerShell ที่คุณต้องการตรวจแก้จุดบกพร่อง

บันทึก

หากดีบักเกอร์ไม่หยุดที่เบรกพอยต์ใด ๆ ให้ดูใน Visual Studio Code Debug Console เพื่อหาบรรทัดที่ระบุว่า:

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

หากคุณเห็นสิ่งนี้ ให้เพิ่ม "justMyCode": false ลงในการกำหนดค่าการเปิดใช้ของคุณ (ที่ระดับเดียวกับ "console": "integratedTerminal"

การกำหนดค่า launch.json สำหรับ Windows PowerShell

การกำหนดค่าการเปิดตัวนี้ใช้ได้กับการทดสอบ cmdlets ของคุณใน Windows PowerShell (powershell.exe) สร้างการกำหนดค่าการเปิดใช้ครั้งที่สองโดยมีการเปลี่ยนแปลงต่อไปนี้:

  1. ชื่อ ควรเป็น PowerShell cmdlets: powershell

  2. type ควรเป็น clr

  3. โปรแกรม ควรเป็น powershell

    มันควรมีลักษณะเช่นนี้:

     {
         "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"
     }
    

กำลังเริ่มเซสชันการดีบัก

ตอนนี้ทุกอย่างพร้อมที่จะเริ่มแก้ไขข้อบกพร่องแล้ว

  • วางเบรกพอยต์ในซอร์สโค้ดสำหรับ cmdlet ที่คุณต้องการตรวจแก้จุดบกพร่อง:

    จุดพักจะแสดงเป็นจุดสีแดงในรางน้ำ

  • ตรวจสอบให้แน่ใจว่าได้เลือกการกำหนดค่า PowerShell cmdlets ที่เกี่ยวข้องในเมนูแบบเลื่อนลงการกำหนดค่าในมุมมอง Debug:

    เลือกการกำหนดค่าการเปิดตัว

  • กด F5 หรือคลิกที่ปุ่ม เริ่มการแก้ไขข้อบกพร่อง

  • สลับไปที่บานหน้าต่างเทอร์มินัลแล้วเรียกใช้ cmdlet ของคุณ:

    เรียกใช้ cmdlet

  • การดำเนินการหยุดที่เบรกพอยต์:

    การประหารชีวิตหยุดที่จุดพัก

คุณสามารถอ่านซอร์สโค้ด ตรวจสอบตัวแปร และตรวจสอบคอลสแต็กได้

หากต้องการสิ้นสุดการแก้ไขข้อบกพร่อง ให้คลิก หยุด ในแถบเครื่องมือแก้ไขข้อบกพร่อง หรือกด Shift+F5 เชลล์ที่ใช้สำหรับการดีบั๊กออกและปลดล็อคไฟล์ DLL ที่คอมไพล์แล้ว

บทความที่เกี่ยวข้อง