เห็นผลลัพธ์ของคอนโซลใน Visual Studio 2010 หรือไม่


163

ฉันกำลังเขียนโปรแกรม C # แบบง่ายที่มีเอาต์พุตบางตัว ( Console.WriteLine("...");) ปัญหาคือทุกครั้งที่รันมันฉันไม่สามารถเห็นเอาต์พุตของโปรแกรมในหน้าต่างเอาต์พุต

แท็ก "การแสดงผลของโปรแกรม" ได้รับการตรวจสอบแล้วและฉันได้เปลี่ยนเส้นทางการแสดงผลทั้งหมดไปที่หน้าต่างกลาง แต่ไม่มีประโยชน์

ฉันจะเปิดใช้งานการดูผลลัพธ์ของโปรแกรมได้อย่างไร

ฉันไม่คิดว่าปัญหาอยู่ที่รหัสของฉัน ฉันพยายามเรียกใช้โปรแกรมอย่างง่ายที่เพิ่งแสดงผลสตริงและอ่านบรรทัด "ala hello world" และฉันก็ยังไม่เห็นผลลัพธ์ใด ๆ ปัญหาคือกับฉันกำลังมองหาผลลัพธ์ในตำแหน่งที่ไม่ถูกต้องหรือ Visual Studio ทำหน้าที่ออก

debug.writeวิธีการยังไม่ได้ทำงาน

ใช้debug.Writeงานได้แม้ว่ามันจะไม่ได้มาก่อน ก่อนที่ฉันจะรีสตาร์ทหรือฉันเพิ่งจะหยุดพักไม่ว่าจะด้วยวิธีใดก็ตามที่ฉันขอหยุดพักก็ได้ ขอบคุณทุกความคิดเห็นที่เป็นประโยชน์ =)


7
Visual Studio ครอบคลุมหน้าต่างคอนโซลของคุณ ย้ายไปยังจอภาพอื่นของคุณ
Hans Passant

คำตอบ:


195

คุณสามารถใช้System.Diagnostics.Debug.WriteหรือSystem.Runtime.InteropServicesวิธีการเขียนข้อความไปยังหน้าต่างแสดงผล


10
System.Diagnostics.Debug.Write (ในกรณีที่ OP ไม่มีเนมสเปซในการเล่น)
jonsca

4
อาจริงฉันแค่เคยเกลียดการควบคุม + ช่วงเวลา :)
Richard Adnams

jonsca: ฉันมีเนมสเปซในการเล่นและทำไมฉันถึงสามารถใช้ console.writeline ได้ฉันต้องการให้โปรแกรมของฉันเขียนไปยังคอนโซลไม่ใช่เพื่อการทดสอบเท่านั้น?
r3x

2
หากแอปพลิเคชันของคุณเป็นแอปพลิเคชันคอนโซลคุณสามารถใช้ console.writeline เพื่อพิมพ์ไปที่หน้าต่างคอนโซลหรือหากแอปพลิเคชันของคุณเป็นแอปพลิเคชันในรูปแบบ windows คุณสามารถใช้ debug.write ตรวจสอบลิงค์นี้เพื่อดูรายละเอียดเพิ่มเติมได้ที่social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/…
Richard Adnams

1
ที่น่าสนใจไม่ทราบว่าและใช่ app ของฉันเป็น app แบบ windows แต่ไม่มีฉันพยายามใช้ debug.Write วิธีปัญหาเดียวกันมันรวบรวมและทั้งหมดเป็น peachy แต่ฉันไม่สามารถดูผลลัพธ์ได้ทุกที่
r3x

50

ต่อไปนี้เป็นสิ่งที่ควรตรวจสอบ:

  1. สำหรับconsole.Write/WriteLineแอปของคุณต้องเป็นแอปพลิเคชันคอนโซล (คลิกขวาที่โครงการใน Solution Explorer เลือกคุณสมบัติและดูคำสั่งผสม " ประเภทเอาท์พุท " ในแท็บแอปพลิเคชัน - ควรเป็น " แอปพลิเคชันคอนโซล " (โปรดทราบถ้าคุณต้องการแอปพลิเคชัน windows หรือไลบรารีคลาสจริงๆ ไม่ต้องเปลี่ยนสิ่งนี้เป็นแอป Console เพื่อรับConsole.WriteLine)

  2. คุณสามารถใช้System.Diagnostics.Debug.WriteLineเพื่อเขียนไปที่หน้าต่างเอาต์พุต (เพื่อแสดงหน้าต่างเอาต์พุตใน VS, ไปที่View | Output ) โปรดทราบว่าการเขียนเหล่านี้จะเกิดขึ้นเฉพาะในบิลด์ที่กำหนดเงื่อนไข DEBUG ไว้ (โดยค่าเริ่มต้น debug builds จะกำหนดสิ่งนี้และ รุ่นที่สร้างไม่ได้)

  3. คุณสามารถใช้System.Diagnostics.Trace.Writelineหากคุณต้องการที่จะเขียนไปยัง "listeners" ที่สามารถกำหนดค่าได้ในบิลด์ที่ไม่ใช่การดีบัก (โดยค่าเริ่มต้นสิ่งนี้จะเขียนไปยังหน้าต่างแสดงผลใน Visual Studio เหมือนDebug.Writeline)


2
ฉันไม่เห็นผลลัพธ์ของฉัน แต่รู้แล้วว่าฉันต้องเรียกใช้โปรแกรมในโหมดดีบัก (F5) แทน Ctrl + Shift + F5 ขอบคุณ!
Travis Heeter

System.Diagnostics.Trace.Writeline ดูเหมือนจะไม่ทำงานแม้ว่าจะมีอย่างอื่นที่ฉันต้องกำหนดค่าสำหรับการนี้
Travis Heeter

1
« 1 » - ข้อความเท็จ Mono แสดงผลลัพธ์ได้ดีสำหรับแอปพลิเคชันทั้งหมด « 2 » - ofc ปัญหาคือว่าวิธีการไม่ส่งออกไปยังสถานีเช่นกัน ดังนั้นจึงไม่สามารถดีบักแอปบนพีซีโดยไม่มี IDE
Hi-Angel

34

เพิ่มConsole.Read();เมื่อสิ้นสุดโปรแกรมของคุณ มันจะป้องกันไม่ให้แอปพลิเคชันปิดและคุณสามารถดูผลลัพธ์ในแบบนั้นได้

นี่เป็นแอปพลิเคชันคอนโซลฉันเพิ่งขุดขึ้นมาว่าจะหยุดหลังจากการประมวลผล แต่ก่อนออก:

class Program
{
    static void Main(string[] args)
    {
        DummyObjectList dol = new DummyObjectList(2);
        dol.Add(new DummyObject("test1", (Decimal)25.36));
        dol.Add(new DummyObject("test2", (Decimal)0.698));
        XmlSerializer dolxs = new XmlSerializer(typeof(DummyObjectList));
        dolxs.Serialize(Console.Out, dol);

        Console.WriteLine(string.Empty);
        Console.WriteLine(string.Empty);

        List<DummyObject> dolist = new List<DummyObject>(2);
        dolist.Add(new DummyObject("test1", (Decimal)25.36));
        dolist.Add(new DummyObject("test2", (Decimal)0.698));
        XmlSerializer dolistxs = new XmlSerializer(typeof(List<DummyObject>));
        dolistxs.Serialize(Console.Out, dolist);
        Console.Read(); //  <--- Right here
    }
}

หรือคุณสามารถเพิ่มเบรกพอยต์ในบรรทัดสุดท้าย


2
Console.ReadLine ทำงานได้ดีคุณเพียงกด Enter เพื่อดำเนินการต่อในตำแหน่งที่อ่านจะใช้คีย์มาตรฐานใด ๆ
Richard Adnams

มันเป็นแอพพลิเคชั่นในรูปแบบ windows และวิธี debug.write หรือ console.writeline ดูเหมือนจะใช้งานได้
r3x

เอ่อทำไมคุณถึงส่งออกไปยังคอนโซลจากแอพ Windows Form? ฉันขอแนะนำให้แสดงผลบนแบบฟอร์มหรือแป้นหมุนหมายเลขแทน หรือสร้างแอปคอนโซล ...
Vincent Vancalbergh

จ้ะที่ถูกชี้ให้ฉันแล้วมันเป็นความผิดพลาดที่โง่ในส่วนของฉันยังคงขอบคุณสำหรับหัวขึ้น =)
r3x

Console.Read () ทำให้หน้าต่างคอนโซลได้รับโฟกัสและจะปรากฏที่ด้านหน้าของ VS หากคุณเพียงใส่จุดพักหลังจาก Console.Write () หน้าต่าง Console จะแสดงผลลัพธ์ของคุณ แต่ไม่ได้โฟกัสดังนั้นอาจมองไม่เห็น
Nigel

21

กดCtrl+ เพื่อเรียกใช้โปรแกรมแทนF5F5


1
Ctrl + F5 เริ่มต้นแอปพลิเคชันโดยไม่มีการดีบักกับคุณคุณจะไม่เห็นสิ่งใดในหน้าต่างเอาต์พุต
Richard Adnams

6
สิ่งนี้ได้ผลสำหรับฉัน ฉันแค่อยากจะเห็นสิ่งที่โปรแกรมกำลังแสดงผลไม่มีคอนโซลเอาต์พุตปรากฏขึ้น นี่เป็นสาเหตุที่ทำให้หน้าต่างคอนโซลเปิดอยู่หลังจากทำงานดังนั้นฉันจึงเห็นผลลัพธ์
davenpcj

+1 นี่คืออันนี้ถ้าคุณไม่ต้องการดีบัก (แสดงคอนโซลและอนุญาตให้อ่านเอาต์พุต)
mlvljr

8

System.Diagnostics.Debug.WriteLine()จะได้ผล แต่คุณต้องมองหาสถานที่ที่เหมาะสมสำหรับผลลัพธ์ ใน Visual Studio 2010 บนแถบเมนูให้คลิกDebug -> Windows -> Outputเอาท์พุทตอนนี้ที่ด้านล่างของหน้าจอเทียบข้างรายการข้อผิดพลาดของคุณควรมีแท็บผลลัพธ์ คลิกที่มันและตรวจสอบอีกครั้งว่ามันแสดงผลจากกระแสการแก้ปัญหาในรายการแบบเลื่อนลง

PS: ฉันคิดว่าหน้าต่างแสดงผลปรากฏในการติดตั้งใหม่ แต่ฉันจำไม่ได้ หากไม่เป็นเช่นนั้นหรือหากคุณปิดโดยไม่ตั้งใจให้ทำตามคำแนะนำเหล่านี้


0

เพื่อให้เปิดคอนโซล windows ของคุณและไม่ใช้วิธีการส่งออกอื่น ๆ แทนที่จะเอาท์พุทสตรีมมาตรฐานไปที่ชื่อของโครงการของคุณ -> Properties -> Linker -> ระบบ

เมื่อมีให้เลือกแท็บ SubSytem และทำเครื่องหมายคอนโซล (/ ระบบย่อย: คอนโซล) เมื่อคุณทำสิ่งนี้แล้วเมื่อใดก็ตามที่คุณต้องการคอมไพล์ให้ใช้ Ctrl + F5 (เริ่มโดยไม่มีการดีบัก) และคอนโซลของคุณจะยังคงเปิดอยู่ :)


ฉันคิดว่ามันใช้ได้กับ C ++ ไม่ใช่กับ C # เหมือนในคำถาม
Dmitry Fedorkov

0

ฉันพบปัญหานี้บ่อยครั้งด้วยเหตุผลบางอย่างและฉันไม่สามารถเข้าใจได้ว่าทำไมถึงไม่มีการกล่าวถึงวิธีแก้ปัญหานี้

คลิกมุมมองเอาต์พุต (หรือCtrlกดค้างไว้แล้วกด W> O)

เอาท์พุทคอนโซลแล้วปรากฏที่ของคุณรายการข้อผิดพลาด , ชาวบ้านและดูหน้าต่าง

หมายเหตุ: ฉันใช้ Visual Studio 2015


หน้าต่างผลลัพธ์ที่คุณพูดถึงดูเหมือนว่ามันถูกสร้างขึ้นโดยดีบักเกอร์เนื่องจากมีบรรทัดจำนวนมากที่เกี่ยวข้องกับแอสเซมบลีที่กำลังโหลดเธรดเริ่มต้นและหยุดเป็นต้น สิ่งนี้แตกต่างจากเอาต์พุตคอนโซล
PeterVermont

0

Visual Studio นั้นครอบคลุมหน้าต่างคอนโซลโดยย่อหน้าต่าง Visual Studio ให้เล็กที่สุดซึ่งกันและกัน


-1

ใน Program.cs ระหว่าง:

static int Main(string[] agrs)
{

และรหัสที่เหลือให้เพิ่ม:

#if DEBUG
    int rtn = Main2(args);
    Console.WriteLine("return " + rtn);
    Console.WriteLine("ENTER to continue.");
    Console.Read();
    return rtn;
}

static int Main2(string[] args)
{
#endif

โปรดเพิ่มคำอธิบายวิธีแก้ไขรหัสของคุณ
Koopakiller

-4

คุณสามารถสร้างวิธีการขนาดเล็กได้ 2 วิธีวิธีหนึ่งสามารถเรียกใช้ที่จุดเริ่มต้นของโปรแกรมอีกวิธีหนึ่งในตอนท้าย คุณสามารถใช้ Console.Read () เพื่อไม่ให้โปรแกรมปิดหลังจากเขียนบรรทัดสุดท้าย

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

startProgram()
{
     Console.WriteLine("-------Program starts--------");
     Console.Read();
}


endProgram()
{
    Console.WriteLine("-------Program Ends--------");
    Console.Read();
}

ฉันไม่เห็นว่าคำตอบนี้นำข้อมูลใหม่มาให้คำถามอย่างไรเนื่องจาก Console.Read () ความเป็นไปได้ดังกล่าวมีการระบุไว้ก่อนหน้าแล้ว
ForceMagic
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.