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 =)

r3x
źródło
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.

Richard Adnams
źródło
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)

JMarsch
źródło
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.

Vincent Vancalbergh
źródło
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 .

waqasahmed
źródło
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.

lordcheeto
źródło
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. :)

Alex
źródło
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.

Metodyka
źródło
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.

opsfunny
źródło
-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
Jerzy
źródło
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();
}
joseph kachere
źródło
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