Console.WriteLine () กับ Debug.WriteLine () ต่างกันอย่างไร


คำตอบ:


106

Console.WriteLineเขียนไปยังสตรีมเอาต์พุตมาตรฐานทั้งในการดีบักหรือรีลีส Debug.WriteLineเขียนไปยังผู้ติดตามการติดตามในคอลเลกชันListenersแต่เฉพาะเมื่อทำงานในการดีบัก เมื่อแอปพลิเคชันถูกคอมไพล์ในการกำหนดค่ารุ่นองค์ประกอบการแก้ปัญหาจะไม่ถูกคอมไพล์ลงในโค้ด

ตามที่Debug.WriteLineเขียนไปยังตัวติดตามการติดตามทั้งหมดในคอลเล็กชันListenersเป็นไปได้ว่าสิ่งนี้สามารถส่งออกได้มากกว่าหนึ่งที่ (หน้าต่างเอาต์พุต Visual Studio, คอนโซล, ไฟล์บันทึก, แอปพลิเคชันของบุคคลที่สามซึ่งลงทะเบียนตัวฟัง (ฉันเชื่อว่าDebugViewทำสิ่งนี้ ) ฯลฯ )


7
DebugView อย่างเคร่งครัดตรวจสอบข้อความที่บันทึกผ่านการเรียก Windows API ดั้งเดิมOutputDebugString(และDebugPrint) DefaultTraceListenerเขียนOutputDebugStringซึ่งเป็นเหตุผลที่ DebugView เห็นเอาท์พุท msdn.microsoft.com/en-us/library/…
MarkJ

41

Console.WriteLine()มีไว้สำหรับโปรแกรมโหมดคอนโซล คุณลักษณะที่ดีของกระบวนการโฮสติ้ง Visual Studio ทำให้ผลลัพธ์ปรากฏในหน้าต่าง Visual Studio Output ในขณะที่การดีบักสำหรับกระบวนการที่ไม่มีคอนโซล ซึ่งมีประโยชน์มากในขณะที่แก้ไขข้อบกพร่อง แต่โปรดระวังว่าคุณควรลบรหัสนี้ (หรือห่อด้วย #ifdef DEBUG) เมื่อคุณพร้อมที่จะสร้างรุ่น Release มิฉะนั้นจะเพิ่มค่าใช้จ่ายที่ไม่จำเป็นให้กับโปรแกรมของคุณ ทำให้น้อยกว่าเหมาะสำหรับการติดตามการดีบัก

Debug.WriteLine()สร้างข้อมูลการติดตามหากคุณสร้างด้วย DEBUG conditional #defined ซึ่งเปิดอยู่โดยค่าเริ่มต้นในรุ่น Debug เมื่อผลลัพธ์สิ้นสุดลงสามารถกำหนดค่าได้ในไฟล์ app.exe.config ถ้าการกำหนดค่านี้ไม่ถูกแทนที่. NET จะจัดเตรียมอินสแตนซ์ของคลาส DefaultTraceListener โดยอัตโนมัติ จะส่งข้อความ Debug.WriteLine () พร้อมกับฟังก์ชัน Windows OutputDebugString () API ไปยังดีบักเกอร์ โปรแกรมดีบักของ Visual Studio ทำให้ปรากฏในหน้าต่างผลลัพธ์เช่นเดียวกับ Console.WriteLine ()

ข้อได้เปรียบที่ชัดเจนของ Debug.WriteLine () คือไม่สร้างโอเวอร์เฮดในรุ่น Release การโทรจะถูกลบออกอย่างมีประสิทธิภาพ อย่างไรก็ตามไม่รองรับการจัดรูปแบบคอมโพสิตคุณจะต้องใช้ String.Format () สำหรับสิ่งนั้น สำหรับการติดตามการดีบักคลาส Debug ควรเป็นทางเลือกของคุณ


18

ถ้าวัตถุประสงค์ของการใช้ Console.WriteLine แต่เพียงผู้เดียวสำหรับการดีบักคุณดีกว่าการใช้Debug.WriteLine

หากคุณต้องการที่จะแสดงข้อความให้กับผู้ใช้ของคุณ (ในโปรแกรมคอนโซล) คุณจะใช้Console.WriteLine

Debug.WriteLine มีไว้เพื่อจุดประสงค์ในการดีบักแอปพลิเคชันของคุณเท่านั้น ในโหมดเผยแพร่คำสั่งการดีบักของคุณจะถูกละเว้น

การใช้แอปพลิเคชันคอนโซลอีกอย่างหนึ่งคือการทดสอบแอสเซมบลีส่วนตัว แทนที่จะใช้วิธีการดั้งเดิมในการสร้างสายรัดทดสอบ GUI บางประเภทเพื่อทดสอบ DLL เวอร์ชันคอมไพล์คุณสามารถสร้าง DLL ใหม่เป็นแอปพลิเคชันคอนโซลและอินพุต / เอาต์พุตจาก / ไปยังคอนโซลได้ ฉันพบว่าเทคนิคนี้เร็วกว่าการใช้เวลาสร้างสายรัดทดสอบ GUI


6
"หากคุณต้องการแสดงข้อความถึงผู้ใช้ของคุณคุณควรใช้ console.writeline" สิ่งนี้อาจสร้างความสับสนให้กับบางคนเนื่องจากจะแสดงบางสิ่งให้กับผู้ใช้หากดำเนินการในแอปพลิเคชันคอนโซล
Matt Wilko
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.