คำเตือนเอกสาร
MSDN สำหรับ / debug switch (ใน Visual Studio คือ Debug Info) ดูเหมือนจะล้าสมัย! นี่คือสิ่งที่มีซึ่งไม่ถูกต้อง
ถ้าคุณใช้ / การแก้ปัญหา: เต็มจะทราบว่ามีผลกระทบบางอย่างเกี่ยวกับความเร็วและขนาดของการเพิ่มประสิทธิภาพ JIT รหัสและผลกระทบที่มีต่อคุณภาพขนาดเล็กรหัสด้วย / แก้ปัญหา: เต็มรูปแบบ เราขอแนะนำ / การแก้ปัญหา: pdbonlyหรือ PDB รหัสที่ก่อให้เกิดการปล่อยไม่มี
ความแตกต่างอย่างหนึ่งระหว่าง / debug: pdbonlyและ / debug: fullคือด้วย / debug: full คอมไพเลอร์จะปล่อย a DebuggableAttribute
ซึ่งใช้เพื่อบอกคอมไพเลอร์ JIT ว่ามีข้อมูลการดีบัก
แล้วสิ่งที่เป็นจริงตอนนี้?
- Pdb-only - ก่อนหน้า. NET 2.0 ช่วยในการตรวจสอบการทิ้งข้อขัดข้องจากผลิตภัณฑ์ที่วางจำหน่าย (เครื่องของลูกค้า) แต่มันไม่ยอมให้ติดดีบักเกอร์ นี่ไม่ใช่กรณีจาก. NET 2.0 มันเป็นตรงเช่นเดียวกับแบบเต็ม
- เต็ม - นี้จะช่วยให้เราสามารถตรวจสอบความผิดพลาดทิ้งและยังช่วยให้เราสามารถแนบการดีบักเกอร์ที่จะปล่อยสร้าง แต่ต่างจากที่ MSDN กล่าวถึง แต่จะไม่ส่งผลกระทบต่อประสิทธิภาพการทำงาน (ตั้งแต่. NET 2.0) มันไม่เหมือนกันตรงตามที่PDB เท่านั้น
ถ้าเหมือนกันทุกประการทำไมเราถึงมีตัวเลือกเหล่านี้ John Robbins (windows debugging god) ค้นพบสิ่งเหล่านี้มีเหตุผลทางประวัติศาสตร์
ย้อนกลับไปใน. NET 1.0 มีความแตกต่าง แต่ใน. NET 2.0 นั้นไม่มี ดูเหมือนว่า. NET 4.0 จะเป็นไปตามรูปแบบเดียวกัน หลังจากตรวจสอบซ้ำกับทีมดีบัก CLR แล้วไม่มีความแตกต่างเลย
สิ่งที่ควบคุมว่า JITter สร้าง debug หรือไม่คือสวิตช์ / optimize < ... >
บรรทัดล่างคือคุณต้องการสร้างรุ่นของคุณด้วย / optimize + และสวิตช์ / debug ใด ๆ เพื่อให้คุณสามารถดีบักด้วยซอร์สโค้ดได้
จากนั้นเขาก็พิสูจน์ต่อไป
ตอนนี้การเพิ่มประสิทธิภาพเป็นส่วนหนึ่งของสวิตช์แยกต่างหาก/optimize
(เรียกว่า Visual Studio Optimize code
)
ในระยะสั้นไม่ว่าจะตั้งค่า DebugInfo แบบ pdb อย่างเดียวหรือเต็มเราก็จะได้ผลลัพธ์เหมือนกัน คำแนะนำคือหลีกเลี่ยงไม่มีเนื่องจากจะทำให้คุณไม่สามารถวิเคราะห์การทิ้งข้อขัดข้องจากผลิตภัณฑ์ที่นำออกใช้หรือการติดดีบักเกอร์