หลังจากบทความก่อนหน้าที่ได้สอนว่าทำอย่างไรถึงได้ NuGet Package มาใช้งานกันเอง หรือ ใช้ภายในองค์กรแล้วครับ คราวนี้ผมมาสอนว่าถ้ามันเกิดปัญหาจริงๆ แล้วเราจะต้องเข้ามา Debug ตัว NuGet Package ที่ใช้ต้องทำอย่างไรบ้างครับ
ทำไมต้อง Debug ตัว NuGet Package
- เพราะ Bug อาจจะเกิดจาก Nuget Package เอง
- เพราะต้องการศึกษาการทำงานของ Library เอามาใช้ Project ในรูปแบบ Nuget Package
มารู้จักกันก่อนว่า NuGet Package แบบไหนถึงจะ Debug ได้
- ต้องมีไฟล์ Symbol ซึ่งถูกจัดเก็บในรูปแบบของไฟล์ .pdb (Program database)
ถ้าเป็น Open Source บ้างเจ้าเค้าจะทำ Symbol ไว้ให้ รายละเอียดขึ้นกับแต่ละ Repo เลยครับ ถ้าไม่มีต้องมา Build และเพิ่ม Symbol สำหรับ Debug

- ต้องมีไฟล์ Source Code ของ NuGet Package ที่สนใจ

- เจ้าไฟล์ Symbol และ Source Code ถ้าจะเอาสะดวก เวลาเราทำเองให้มัน Public เข้าไปพร้อมกับตัว NuGet Package เลยครับ
- มันจะยากในกรณีที่เป็นพวก Open Source หรือ ตัว NuGet ได้มาจาก NuGet Server อันนี้ต้องหาไฟล์ Symbol จาก Symbol Server และเอา Code จาก GitHub / cvs.sourceforge หรือจากแหล่งอื่นๆ มาใช้ เพื่อการ Debug ครับ
ทำให้ Visual Studio สามารถ Debug Code จาก NuGet Package ได้
Note: ตัวอย่างนี้ผมเสนอการ Debug NuGet Package ที่สร้างเองใช้ภายในองค์กรนะครับ แต่สามารถไปประยุกต์ใช้กับ NuGet Package จาก nuget.org ได้ เช่นกันครับ
- เปิด Visual Studio เข้ามาเมนู Tool > Options > Debugging ในส่วน General ให้ติ๊กตามรูป

- กำหนดที่อยู่ของ Symbol Cache เอาไว้ใช้เป็น Temp ตอนอ้างอิงระหว่าง Debug

- จากกรอปเส้นปะสีม่วงตรงจุดนี้สามารถเลือกได้ว่าเป็น Specific Modules หรือ Load All Modules โดยแบบหลังตอน Build และ Run มันช้ากว่าครับ
- ทดสอบ Run Code และเข้าเมนู DEBUG > Windows > Modules เพื่อเปิดหน้าจอ Modules เป็นหน้าที่ที่เอาไว้จัดการ DLL ตอน Runtime

- ที่หน้าจอ Module ถ้าสนใจ DLL ของ NuGet Package ในองค์กรอันไหนให้คลิกขวาเลือก Always Load Automatically

- ทดสอบ Run Code และกำหนด Breakpoint ตรงจุดที่สนใจ เพื่อ Debug Code ของ NuGet Package
- เมื่อมาถึงจุดที่ Breakpoint เมื่อกด F11 ไว้ตัว Visual Studio ให้ไปหา
Code C:\Users\<<ชื่อ User>>\.nuget\packages\<<ชื่อ NuGet>>\<<เลขเวอร์ชัน>>\src

- ตอนนี้เข้ามา Debug Code ของ NuGet ได้เรียบร้อย

Reference
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.