Видите вывод консоли в Visual Studio 2010?


163

Я пишу простую программу на C # с некоторыми выводами ( Console.WriteLine("...");). Проблема в том, что каждый раз, когда я запускаю его, я не вижу вывод программы в окне вывода.

Тег «программный вывод» уже проверен, и я уже перенаправил все выходы в промежуточное окно, но безрезультатно.

Как включить просмотр результатов программы?

Я не думаю, что проблема заключается в моем коде. Я попытался запустить простую программу, которая просто выводит строку и readline "ala hello world", и я все еще не могу увидеть какой-либо вывод. Проблема либо в том, что я ищу выходной файл в неправильном месте, либо в Visual Studio.

debug.writeМетод также не работает.

Используя debug.Write, все это работает, хотя это не было раньше. Либо что-то ссорилось со мной, прежде чем я перезапустил, или мне просто нужно сделать перерыв, в любом случае, теперь все хорошо. Спасибо всем за полезные комментарии =)


7
Visual Studio закрывает окно вашей консоли. Переместите его на другой монитор.
Ганс Пассант

Ответы:


195

Вы можете использовать метод System.Diagnostics.Debug.Writeили System.Runtime.InteropServicesдля записи сообщений в окно вывода.


10
System.Diagnostics.Debug.Write (в случае, если у OP нет пространства имен в игре)
jonsca

4
Ах, правда, я привык привыкать к контрольному + периоду :)
Ричард Аднамс

Йонска: у меня есть пространство имен в игре, и почему я могу просто использовать console.writeline, я хочу, чтобы моя программа записывала в консоль ее не только по причинам тестирования?
r3x

2
Если ваше приложение является консольным приложением, вы можете использовать console.writeline для печати в окне консоли или, если ваше приложение является приложением формы Windows, вы можете использовать debug.write. Проверьте эту ссылку для получения дополнительной информации social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/…
Ричард Аднамс

1
интересно, я этого не знал, и да, мое приложение является приложением Windows Form, но нет, я пытался использовать метод debug.Write, та же проблема, он компилируется и все персиковое, но я не могу увидеть результат где-либо
r3x

50

Вот пара вещей, чтобы проверить:

  1. Для console.Write/WriteLine, ваше приложение должно быть консольным приложением. (щелкните правой кнопкой мыши проект в обозревателе решений, выберите « Свойства» и просмотрите комбо « Тип вывода » на вкладке « Приложение » - должно быть « Консольное приложение ») (обратите внимание, если вам действительно нужно приложение Windows или библиотека классов, не измените это на консольное приложение, чтобы получить Console.WriteLine).

  2. Вы можете использовать System.Diagnostics.Debug.WriteLineдля записи в окно вывода (чтобы показать окно вывода в VS, попал в View | Output ) Обратите внимание, что эти записи будут происходить только в сборке, где определено условное условие DEBUG (по умолчанию это определяют в отладочных сборках, и релизов сборок нет)

  3. Вы можете использовать, System.Diagnostics.Trace.Writelineесли хотите иметь возможность записи в настраиваемые «слушатели» в не отладочных сборках. (по умолчанию это записывает в окно вывода в Visual Studio, так же, как Debug.Writeline)


2
Я не видел свои выходные данные, но потом понял, что мне нужно было запустить программу в режиме отладки (F5) вместо Ctrl + Shift + F5. Спасибо!
Трэвис Хитер

System.Diagnostics.Trace.Writeline, похоже, не работает, есть ли что-то еще, что мне нужно настроить для этого?
Трэвис Хитер

1
«1» - ложное утверждение. Моно показывает вывод нормально для всех приложений. «2» - оф. Проблема в том, что метод также не выводит данные на терминал. Поэтому нельзя отлаживать приложение на ПК без IDE.
Привет, Ангел,

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, чтобы продолжить, когда Read принимает любой стандартный ключ.
Ричард Аднамс

это приложение формы Windows, и кажется, что debug.write или метод console.writeline работают
r3x

Эмм, почему вы выводите на консоль из приложения Windows Form? Я предлагаю вывод на форму или Dialgbox вместо этого. Или сделайте консольное приложение ...
Винсент Ванкалберг

да, на это мне уже указали, это просто глупая ошибка с моей стороны, все равно спасибо за хедз-ап =)
r3x

Console.Read () заставляет окно консоли получать фокус и, следовательно, появляться перед VS. Если вы просто установите точку останова после Console.Write (), в окне консоли будет показан ваш вывод, но он не имеет фокуса, поэтому может быть не виден.
Найджел

21

Нажмите Ctrl+, F5чтобы запустить программу вместо F5.


1
Ctrl + F5 запускает приложение без отладки, чтобы вы ничего не увидели в окне вывода.
Ричард Аднамс

6
Это сработало для меня; Я просто хотел посмотреть, что выводила программа, но ни один из выводов консоли не отображался. Это заставило его держать окно консоли открытым после запуска, чтобы я мог видеть вывод.
davenpcj

+1, это тот, который вы на самом деле не хотите отлаживать (показывает консоль и позволяет прочитать вывод).
mlvljr

8

System.Diagnostics.Debug.WriteLine()будет работать, но вы должны искать правильное место для вывода. В Visual Studio 2010 в строке меню выберите Отладка -> Windows -> Вывод . Теперь в нижней части экрана, пристыкованного к списку ошибок, должна быть вкладка вывода. Щелкните по нему и дважды проверьте, что он показывает выходные данные из потока отладки в раскрывающемся списке.

PS: я думаю, что окно вывода показывает при новой установке, но я не могу вспомнить. Если это не так, или если вы закрыли его случайно, следуйте этим инструкциям.


0

Чтобы оставить консоль Windows открытой и не использовать другие методы вывода, кроме стандартного потока вывода, перейдите в «Имя вашего проекта» -> «Свойства» -> «Линкер» -> «Система».

Оказавшись там, выберите вкладку SubSytem и отметьте Console (/ SUBSYSTEM: CONSOLE). Как только вы это сделаете, всякий раз, когда вы захотите скомпилировать, используйте Ctrl + F5 (Начать без отладки), и ваша консоль будет оставаться открытой. :)


Я думаю, что это применимо к C ++, а не к C #, как в вопросе.
Дмитрий Федорков

0

Я сталкиваюсь с этим часто по некоторым причинам, и я не могу понять, почему это решение не было упомянуто:

Нажмите ViewOutput (или просто Ctrlнажмите и нажмите W> O)

Вывод на консоль появится там, где находятся ваши окна Error List , Locals и Watch .

Примечание: я использую 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.