การใช้ Visual Studio Code เพื่อดีบัก cmdlets ที่คอมไพล์แล้ว
คู่มือนี้จะแสดงวิธีการดีบักซอร์สโค้ด C# แบบโต้ตอบสำหรับโมดูล PowerShell ที่คอมไพล์แล้วโดยใช้ Visual Studio Code (VS Code) และส่วนขยาย C#
ถือว่ามีความคุ้นเคยกับดีบักเกอร์ Visual Studio Code บ้าง
สำหรับคำแนะนำทั่วไปเกี่ยวกับดีบักเกอร์ VS Code โปรดดูที่ การดีบักใน Visual Studio Code
สำหรับตัวอย่างของการดีบักไฟล์สคริปต์และโมดูล PowerShell โปรดดูที่ การใช้โค้ด Visual Studio สำหรับการแก้ไขและการดีบักจากระยะไกล
คู่มือนี้ถือว่าคุณได้อ่านและปฏิบัติตามคำแนะนำในคู่มือการเขียนโมดูลแบบพกพาแล้ว
การสร้างงานสร้าง
สร้างโปรเจ็กต์ของคุณโดยอัตโนมัติก่อนที่จะเริ่มเซสชั่นการแก้ไขจุดบกพร่อง การสร้างใหม่ช่วยให้แน่ใจว่าคุณจะดีบักโค้ดเวอร์ชันล่าสุดของคุณ
กำหนดค่างานบิลด์:
ใน ชุดคำสั่ง ให้เรียกใช้คำสั่ง กำหนดค่างานการสร้างเริ่มต้น
เรียกใช้กำหนดค่างานสร้างเริ่มต้น
ในกล่องโต้ตอบ เลือกงานที่จะกำหนดค่า ให้เลือก สร้างไฟล์ Tasks.json จากเทมเพลต
ในกล่องโต้ตอบ เลือกเทมเพลตงาน ให้เลือก .NET Core
ไฟล์ tasks.json ใหม่จะถูกสร้างขึ้นหากยังไม่มี
หากต้องการทดสอบงานสร้างของคุณ:
ใน Command Palette ให้เรียกใช้คำสั่ง Run Build Task
ในกล่องโต้ตอบ เลือกงานสร้างที่จะเรียกใช้ ให้เลือก สร้าง
ข้อมูลเกี่ยวกับไฟล์ 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
ติดตั้งส่วนขยาย C# สำหรับ Visual Studio Code
ในบานหน้าต่างการแก้ไขข้อบกพร่อง ให้เพิ่มการกำหนดค่าการแก้ไขข้อบกพร่อง
ในกล่องโต้ตอบ
เลือกสภาพแวดล้อมให้เลือก.NET Coreไฟล์
launch.jsonถูกเปิดในตัวแก้ไข เมื่อเคอร์เซอร์ของคุณอยู่ในอาร์เรย์configurationsคุณจะเห็นตัวเลือกconfigurationหากคุณไม่เห็นรายการนี้ ให้เลือก เพิ่มการกำหนดค่าหากต้องการสร้างการกำหนดค่าการแก้ไขข้อบกพร่องเริ่มต้น ให้เลือก เปิดแอป .NET Core Console:
เปิดแอป .NET Core Console
แก้ไขฟิลด์
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) สร้างการกำหนดค่าการเปิดใช้ครั้งที่สองโดยมีการเปลี่ยนแปลงต่อไปนี้:
ชื่อควรเป็นPowerShell cmdlets: powershelltypeควรเป็นclrโปรแกรมควรเป็น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 ที่คอมไพล์แล้ว