Widzisz dane wyjściowe konsoli w programie Visual Studio 2010?


163

Piszę prosty program C # z niektórymi wyjściami ( Console.WriteLine("...");). Problem polega na tym, że za każdym razem, gdy go uruchamiam, nie widzę wyjścia programu w oknie wyjściowym.

Znacznik „wyjście programu” jest już zaznaczony i przekierowałem już wszystkie wyjścia do okna pośredniego, ale bezskutecznie.

Jak włączyć wyświetlanie wyników programu?

Nie sądzę, że problem leży w moim kodzie. Próbowałem uruchomić prosty program, który po prostu wyświetla ciąg i readline „ala hello world” i nadal nie widzę żadnych wyników. Problem polega na tym, że szukam danych wyjściowych w niewłaściwej lokalizacji lub program Visual Studio działa.

Plik debug.write metoda również nie działa.

Używając debug.Write, wszystko działa, choć wcześniej nie działało. Albo coś mi się zepsuło, zanim uruchomiłem ponownie, albo po prostu muszę zrobić sobie przerwę, tak czy inaczej, teraz wszystko jest w porządku. Dziękuję wszystkim za pomocne komentarze =)


7
Program Visual Studio zasłania okno konsoli. Przenieś go na inny monitor.
Hans Passant,

Odpowiedzi:


195

Możesz użyć metody System.Diagnostics.Debug.Writelub System.Runtime.InteropServices, aby pisać komunikaty w oknie wyjściowym.


10
System.Diagnostics.Debug.Write (w przypadku gdy OP nie ma przestrzeni nazw w grze)
jonsca

4
Ach, prawda, jestem po prostu przyzwyczajony do wciskania control + kropka :)
Richard Adnams

jonsca: Mam przestrzeń nazw w grze i dlaczego mogę po prostu użyć console.writeline, chcę, aby mój program zapisywał na konsoli nie tylko w celach testowych?
r3x

2
Jeśli twoja aplikacja jest aplikacją konsolową, możesz użyć console.writeline do drukowania w oknie konsoli lub jeśli twoja aplikacja jest aplikacją formularza Windows, możesz użyć debug.write. Sprawdź ten link, aby uzyskać
Richard Adnams

1
ciekawe, nie wiedziałem o tym i tak, moja aplikacja jest aplikacją Windows Form, ale nie, próbowałem użyć debug, metoda pisania ten sam problem, kompiluje się i wszystko jest brzoskwiniowe, ale nigdzie nie widzę wyjścia
r3x

50

Oto kilka rzeczy do sprawdzenia:

  1. Dla console.Write/WriteLineTwoja aplikacja musi być aplikacją konsoli. (kliknij prawym przyciskiem myszy projekt w Eksploratorze rozwiązań, wybierz Właściwości i spójrz na kombinację „ Typ wyjścia ” na karcie Aplikacja - powinno to być „ Aplikacja konsoli ” (uwaga, jeśli naprawdę potrzebujesz aplikacji Windows lub biblioteki klas, nie Nie zmieniaj tego na aplikację konsolową, aby uzyskać Console.WriteLine).

  2. Możesz użyć System.Diagnostics.Debug.WriteLinedo zapisu w oknie wyjściowym (aby wyświetlić okno wyjściowe w VS, dostałem się do View | Output ) Zauważ, że te zapisy wystąpią tylko w kompilacji, w której zdefiniowano warunek DEBUG (domyślnie, kompilacje debugowania definiują to i wydania kompilacji nie)

  3. Możesz użyć, System.Diagnostics.Trace.Writelinejeśli chcesz mieć możliwość pisania do konfigurowalnych "słuchaczy" w kompilacjach bez debugowania. (domyślnie zapisuje w oknie danych wyjściowych w programie Visual Studio, podobnie jak Debug.Writeline)


2
Nie widziałem swojego wyjścia, ale zdałem sobie sprawę, że muszę uruchomić program w trybie debugowania (F5) zamiast Ctrl + Shift + F5. Dzięki!
Travis Heeter

Wygląda na to, że System.Diagnostics.Trace.Writeline nie działa, ale czy jest coś jeszcze do skonfigurowania?
Travis Heeter

1
«1» - fałszywe stwierdzenie. Mono pokazuje dobre wyniki dla wszystkich aplikacji. «2» - ofc. Problem polega na tym, że metoda nie wysyła również do terminala. Nie można więc debugować aplikacji na komputerze bez IDE.
Hi-Angel,

34

Dodaj Console.Read();na końcu swojego programu. Uniemożliwi to zamknięcie aplikacji iw ten sposób możesz zobaczyć jego wyjście.

To jest aplikacja konsoli, którą właśnie wykopałem, która zatrzymuje się po przetworzeniu, ale przed zamknięciem:

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

Alternatywnie możesz po prostu dodać punkt przerwania w ostatnim wierszu.


2
Console.ReadLine działa równie dobrze, wystarczy nacisnąć klawisz Enter, aby kontynuować, gdzie jako Read pobiera dowolny standardowy klucz.
Richard Adnams,

jest to aplikacja w formacie Windows, a metoda debug.write ani console.writeline wydaje się działać
r3x

Euhm, dlaczego wyprowadzasz na konsolę z aplikacji Windows Form? Sugeruję zamiast tego wypisywanie na formularzu lub dialgbox. Lub stwórz aplikację na konsolę ...
Vincent Vancalbergh,

tak, że już mi wskazano, to tylko głupi błąd z mojej strony, wciąż dzięki za
ostrzeżenia

Console.Read () powoduje, że okno konsoli staje się fokusem, a zatem pojawia się przed VS. Jeśli po prostu wstawisz punkt przerwania po Console.Write (), okno Console pokaże twoje dane wyjściowe, ale nie będzie miało fokusu, więc może nie być widoczne.
Nigel

21

Naciśnij Ctrl+, F5aby uruchomić program zamiastF5 .


1
Ctrl + F5 uruchamia aplikację bez debugowania, aby nic nie było widoczne w oknie wyjściowym.
Richard Adnams,

6
To zadziałało dla mnie; Chciałem tylko zobaczyć, co wyświetla program, żadne wyjście konsoli nie było wyświetlane. To spowodowało, że po uruchomieniu okno konsoli pozostało otwarte, więc mogłem zobaczyć dane wyjściowe.
davenpcj

+1, to jest to, jeśli tak naprawdę nie chcesz debugować (pokazuje konsolę i pozwala odczytać wyjście).
mlvljr

8

System.Diagnostics.Debug.WriteLine()będzie działać, ale musisz szukać wyników w odpowiednim miejscu. W programie Visual Studio 2010 na pasku menu kliknij opcję Debuguj -> Windows -> Dane wyjściowe . Teraz u dołu ekranu zadokowanego obok listy błędów powinna znajdować się karta wyjścia. Kliknij go i dwukrotnie sprawdź, czy pokazuje dane wyjściowe ze strumienia debugowania na liście rozwijanej.

PS: Myślę, że okno danych wyjściowych pokazuje się po nowej instalacji, ale nie pamiętam. Jeśli tak się nie stanie lub jeśli przypadkowo je zamknąłeś, postępuj zgodnie z tymi instrukcjami.


0

Aby zachować otwartą konsolę Windows i nie używać innych metod wyjściowych zamiast standardowego cout strumienia wyjściowego, przejdź do Nazwa-twojego-projektu -> Właściwości -> Linker -> System.

Tam wybierz zakładkę SubSytem i zaznacz Console (/ SUBSYSTEM: CONSOLE). Gdy już to zrobisz, za każdym razem, gdy chcesz skompilować, użyj Ctrl + F5 (Uruchom bez debugowania), a twoja konsola pozostanie otwarta. :)


Myślę, że ma to zastosowanie do C ++, a nie do C #, jak w pytaniu.
Dmitry Fedorkov

0

Z jakiegoś powodu często na to napotykam i nie mogę pojąć, dlaczego nie wspomniano o tym rozwiązaniu:

Kliknij WidokWyjście (lub po prostu przytrzymaj Ctrli naciśnij W> O)

Dane wyjściowe konsoli zostaną wyświetlone w miejscu, w którym znajdują się listy błędów , ustawienia lokalne i czujniki .

Uwaga: używam programu Visual Studio 2015.


Okno danych wyjściowych, o którym wspomniałeś, wygląda tak, jakby zostało wygenerowane przez debugger, ponieważ zawiera wiele wierszy związanych z ładowanymi zestawami, uruchamianiem i zatrzymywaniem wątków itp. Różni się to od danych wyjściowych konsoli.
PeterVermont

0

Program Visual Studio sam w sobie zakrywa okno konsoli, spróbuj zminimalizować okno programu Visual Studio, w którym są one narysowane.


-1

W Program.cs pomiędzy:

static int Main(string[] agrs)
{

a resztę kodu dodaj:

#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

Dodaj opis, w jaki sposób Twój kod rozwiązuje problem.
Koopakiller

-4

Możesz stworzyć 2 małe metody, jedną, którą można wywołać na początku programu, a drugą na końcu. Możesz także użyć Console.Read (), aby program nie zamykał się po ostatniej linii zapisu.

W ten sposób możesz określić, kiedy Twoja funkcjonalność zostanie wykonana, a także kiedy program istnieje.

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


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

Nie rozumiem, w jaki sposób ta odpowiedź wnosi nowe informacje do pytania, skoro możliwość Console.Read () została już wcześniej określona.
ForceMagic
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.