Nhìn thấy đầu ra của giao diện điều khiển trong Visual Studio 2010?


163

Tôi đang viết một chương trình C # đơn giản với một số kết quả đầu ra ( Console.WriteLine("...");). Vấn đề là, mỗi lần tôi chạy nó, tôi không thể thấy đầu ra của chương trình trong cửa sổ đầu ra.

Thẻ "đầu ra chương trình" đã được kiểm tra và tôi đã chuyển hướng tất cả các đầu ra sang cửa sổ trung gian nhưng không có kết quả.

Làm cách nào để tôi thấy đầu ra của chương trình?

Tôi không nghĩ vấn đề nằm ở mã của tôi. Tôi đã thử chạy một chương trình đơn giản chỉ xuất ra một chuỗi và đọc "ala hello world" và tôi vẫn không thể thấy bất kỳ đầu ra nào. Vấn đề là do tôi tìm kiếm đầu ra ở vị trí sai hoặc Visual Studio hành động.

Các debug.writephương pháp cũng không hoạt động.

Sử dụng debug.Write, tất cả đều hoạt động, mặc dù trước đây nó không hoạt động. Hoặc là một cái gì đó đã được xử lý trước khi tôi khởi động lại hoặc tôi chỉ cần nghỉ ngơi, dù bằng cách nào thì mọi thứ đều tốt. Cảm ơn tất cả các ý kiến ​​hữu ích =)


7
Visual Studio đang che cửa sổ giao diện điều khiển của bạn. Di chuyển nó đến màn hình khác của bạn.
Hans Passant

Câu trả lời:


195

Bạn có thể sử dụng System.Diagnostics.Debug.Writehoặc System.Runtime.InteropServicesphương thức để viết tin nhắn vào Cửa sổ đầu ra.


10
System.Diagnostics.Debug.Write (trong trường hợp OP không có không gian tên trong trò chơi)
jonsca

4
À đúng rồi, tôi chỉ quen với việc kiểm soát + giai đoạn :)
Richard Adnams

jonsca: tôi có một không gian tên trong trò chơi và tại sao tôi chỉ có thể sử dụng console.writeline, tôi muốn chương trình của tôi ghi vào bàn điều khiển không chỉ vì lý do kiểm tra ??
r3x

2
Nếu ứng dụng của bạn là một ứng dụng giao diện điều khiển, bạn có thể sử dụng console.writeline để in ra cửa sổ giao diện điều khiển hoặc nếu ứng dụng của bạn là ứng dụng biểu mẫu cửa sổ, bạn có thể sử dụng debug.write. Kiểm tra liên kết này để biết thêm thông tin xã hội.msdn.microsoft.com/Forums/en/csharpgeneral/thread/ chủ
Richard Adnams

1
thú vị không biết điều đó, và vâng, ứng dụng của tôi là một ứng dụng dạng cửa sổ, nhưng không tôi đã thử sử dụng debug. Vấn đề tương tự, nó biên dịch và tất cả đều rất hay nhưng không thể thấy đầu ra ở bất cứ đâu
r3x

50

Dưới đây là một vài điều cần kiểm tra:

  1. Đối với console.Write/WriteLine, ứng dụng của bạn phải là một ứng dụng giao diện điều khiển. (bấm chuột phải vào dự án trong Solution Explorer, chọn Thuộc tính và xem tổ hợp " Loại đầu ra " trong Tab Ứng dụng - phải là " Ứng dụng bảng điều khiển " (lưu ý, nếu bạn thực sự cần một ứng dụng windows hoặc thư viện lớp, đừng Không thay đổi ứng dụng này thành Ứng dụng Console chỉ để lấy Console.WriteLine).

  2. Bạn có thể sử dụng System.Diagnostics.Debug.WriteLineđể ghi vào cửa sổ đầu ra (để hiển thị cửa sổ đầu ra trong VS, phải xem View | Đầu ra ) Lưu ý rằng các ghi này sẽ chỉ xảy ra trong một bản dựng trong đó điều kiện DEBUG được xác định (theo mặc định, các bản dựng gỡ lỗi xác định điều này và phát hành bản dựng không)

  3. Bạn có thể sử dụng System.Diagnostics.Trace.Writelinenếu bạn muốn có thể ghi vào "trình nghe" có thể định cấu hình trong các bản dựng không gỡ lỗi. (theo mặc định, điều này ghi vào Cửa sổ đầu ra trong Visual Studio, giống như Debug.Writeline)


2
Tôi đã không nhìn thấy đầu ra của mình, nhưng sau đó nhận ra rằng tôi phải chạy chương trình ở chế độ gỡ lỗi (F5) thay vì Ctrl + Shift + F5. Cảm ơn!
Travis Heeter

System.Diagnostics.Trace.Writeline dường như không hoạt động, có điều gì khác tôi cần cấu hình cho việc này không?
Travis Heeter

1
«1» - tuyên bố sai. Mono hiển thị đầu ra tốt cho tất cả các ứng dụng. «2» - ofc. Vấn đề là phương thức này cũng không xuất ra terminal. Vì vậy, người ta không thể gỡ lỗi một ứng dụng trên PC mà không có IDE.
Hi-Angel

34

Thêm một Console.Read();vào cuối chương trình của bạn. Nó sẽ giữ cho ứng dụng không bị đóng và bạn có thể thấy đầu ra của nó theo cách đó.

Đây là một ứng dụng giao diện điều khiển tôi vừa đào lên dừng lại sau khi xử lý nhưng trước khi thoát:

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
    }
}

Ngoài ra, bạn có thể chỉ cần thêm một điểm dừng trên dòng cuối cùng.


2
Console.ReadLine hoạt động tốt, bạn chỉ cần nhấn enter để tiếp tục khi Read lấy bất kỳ khóa tiêu chuẩn nào.
Richard Adnams

đây là một ứng dụng dạng cửa sổ và phương thức debug.write cũng như console.writeline dường như hoạt động
r3x

Euhm, tại sao bạn xuất ra giao diện điều khiển từ ứng dụng Windows Form? Tôi đề nghị xuất ra trên một biểu mẫu hoặc hộp số thay thế. Hoặc tạo một ứng dụng bảng điều khiển ...
Vincent Wrapsalbergh

vâng, điều đó đã được chỉ ra cho tôi, đó chỉ là một sai lầm ngu ngốc của tôi, vẫn cảm ơn vì đã ngẩng cao đầu =)
r3x

Console.Read () làm cho cửa sổ giao diện điều khiển lấy nét và do đó xuất hiện trước mặt VS. Nếu bạn chỉ cần đặt một điểm dừng sau Bảng điều khiển. Viết () cửa sổ Bảng điều khiển sẽ hiển thị đầu ra của bạn nhưng không có tiêu điểm nên có thể không hiển thị.
Nigel

21

Nhấn Ctrl+ F5để chạy chương trình thay vì F5.


1
Ctrl + F5 khởi động ứng dụng mà không cần gỡ lỗi cho bạn sẽ không thấy gì trong cửa sổ đầu ra.
Richard Adnams

6
Điều này làm việc cho tôi; Tôi chỉ muốn xem những gì chương trình đã xuất ra, không có đầu ra giao diện điều khiển nào được hiển thị. Điều này khiến nó giữ cho cửa sổ giao diện điều khiển mở sau khi chạy để tôi có thể thấy đầu ra.
davenpcj

+1, đây là cái, nếu bạn không thực sự muốn gỡ lỗi (hiển thị bảng điều khiển và cho phép đọc đầu ra).
mlvljr

8

System.Diagnostics.Debug.WriteLine()sẽ làm việc, nhưng bạn phải tìm đúng nơi cho đầu ra. Trong Visual Studio 2010, trên thanh menu, bấm Gỡ lỗi -> Windows -> Đầu ra . Bây giờ, ở dưới cùng của màn hình được neo bên cạnh danh sách lỗi của bạn, cần có một tab đầu ra. Nhấp vào nó và kiểm tra kỹ xem nó hiển thị đầu ra từ luồng gỡ lỗi trong danh sách thả xuống.

PS: Tôi nghĩ cửa sổ đầu ra hiển thị trên bản cài đặt mới, nhưng tôi không thể nhớ. Nếu không, hoặc nếu bạn vô tình đóng nó, hãy làm theo các hướng dẫn sau.


0

Để tiếp tục mở bảng điều khiển windows của bạn và không sử dụng các phương thức đầu ra khác thay vì cout luồng đầu ra tiêu chuẩn, hãy truy cập Name-of-your-project -> Properties -> Linker -> System.

Khi đó, chọn Tab SubSytem và đánh dấu Bảng điều khiển (/ SUBSYSTEM: ConsolE). Khi bạn đã hoàn thành việc này, bất cứ khi nào bạn muốn biên dịch, hãy sử dụng Ctrl + F5 (Bắt đầu mà không cần gỡ lỗi) và bảng điều khiển của bạn sẽ tiếp tục mở. :)


Tôi nghĩ rằng nó có thể áp dụng cho C ++, không phải cho C # như trong câu hỏi.
Dmitry Fedorkov

0

Tôi gặp phải vấn đề này thường xuyên vì một số lý do và tôi không thể hiểu tại sao giải pháp này không được đề cập:

Nhấp vào XemĐầu ra (hoặc chỉ giữ Ctrlvà nhấn W> O)

Bảng điều khiển đầu ra sau đó xuất hiện nơi Danh sách lỗi , Địa phương và cửa sổ Xem của bạn.

Lưu ý: Tôi đang sử dụng Visual Studio 2015.


Cửa sổ đầu ra mà bạn đề cập trông giống như được tạo bởi trình gỡ lỗi vì nó có rất nhiều dòng liên quan đến các cụm được tải, các luồng bắt đầu và dừng vvetera. Điều này khác với đầu ra giao diện điều khiển.
PeterVermont

0

Visual Studio tự nó che cửa sổ giao diện điều khiển, hãy thử thu nhỏ cửa sổ Visual Studio mà chúng được vẽ lên nhau.


-1

Trong Program.cs, giữa:

static int Main(string[] agrs)
{

và phần còn lại của mã của bạn, thêm:

#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

Vui lòng thêm một mô tả, làm thế nào mã của bạn giải quyết vấn đề.
Koopakiller

-4

Bạn có thể tạo 2 phương thức nhỏ, một phương thức có thể được gọi ở đầu chương trình, phương thức kia ở cuối. Bạn cũng có thể sử dụng Console.Read () để chương trình không đóng sau dòng ghi cuối cùng.

Bằng cách này bạn có thể xác định khi nào chức năng của bạn được thực thi và cả khi chương trình tồn tại.

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


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

Tôi không thấy câu trả lời này mang lại thông tin mới cho câu hỏi như thế nào vì khả năng Console.Read () đã được nêu trước đây.
ForceMagic
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.