2010-03-30 3 views
85

При выполнении консольного приложения в Java с Eclipse я вижу, что вывод помещается в текстовое поле в самой IDE, вместо того, чтобы запускать консоль, например в Visual Studio. Это пригодится, так как даже после выхода из программы я все же хорошо использую текст, написанный на нем, так как он не стирается, пока я не запустил его снова. Можно ли добиться чего-то подобного с помощью Visual Studio? Я знаю, что вместо того, чтобы делатьНаличие вывода консольного приложения в Visual Studio вместо консоли

System.Console.WriteLine(str); 

я могу сделать

System.Diagnostics.Debug.WriteLine(str); 

, но это не совсем то же самое, как вы получите много «мусора» в окне вывода, так как все загруженное символы и т. д.

Еще лучше, возможно ли, чтобы все, что было сделано в самой IDE, когда вы запускаете приложение, вместо того, чтобы запускать консоль?

+0

Какую версию VS вы используете? – Gabe

+0

Visual Studio 2010 RC –

+0

У вас есть панель результатов теста? – Gabe

ответ

30

В диалоговом окне «Параметры Visual Studio» -> «Отладка» -> «Перенаправить все окна окна вывода в непосредственное окно».

+52

Я установил этот флажок, но я все равно получаю всплывающее окно консоли и ничего в окне «Выход» (Debug, Test, Build, ..) или «Immediate Window». – GuiSim

+3

Не работает вообще для меня, точно так же, как и раньше – EvenLisle

+5

@EvenLisle вам нужно изменить тип приложения на приложение Windows, как в ответе [stolsvik] (http://stackoverflow.com/a/9615237/834521). Опция, упомянутая в этом ответе, по умолчанию была для меня в любом случае. – TooTone

4

Использование System.Diagnostics.Trace

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

+0

Да, но я хочу знать, если можно просто сделать это, не выполняя его самостоятельно. –

+0

@devoured Класс Trace выводит только окно отладки по умолчанию. Вам нужно только подключить дополнительных слушателей (и есть несколько уже написанных, которые вы можете использовать), если вы хотите также видеть вывод в другом месте. –

+1

Я перешел в диалог «Параметры отладки» и выбрал «Переадресовать весь текст окна вывода в окно« Немедленное окно », чтобы сделать вывод трассировки в окне« Немедленное », чтобы он не смешивался с отладочным дерьмом. – Gabe

2

Вы можете создать приложение-оболочку, которое вы запускаете, вместо прямого запуска вашего реального приложения. Приложение-оболочка может прослушивать stdout и перенаправлять все на Trace. Затем измените параметры запуска, чтобы запустить свою обертку и пройти по пути к реальному приложению.

Вы также можете иметь обертку, автоматически присоединить отладчик к новому процессу, если отладчик прикреплен к обертке.

33

В Visual Studio Опции Диалоговое окно -> Отладка -> Отметьте «Переслать все окна окна вывода в окно немедленного доступа». Затем перейдите к настройкам вашего проекта и измените тип «Консольное приложение» на «Приложение Windows». В этот момент Visual Studio больше не открывает консольное окно, а выход перенаправляется в окно вывода в Visual Studio. Однако вы не можете делать ничего «творческого», например, запрашивать ввод ключа или текста или очищать консоль - вы получите исключения во время выполнения.

+13

Я нахожу это особенно неуклюжим. Что, интересно, является обоснованием этого в VS? Должна быть способность всех современных IDE иметь панель внутри самой IDE, которая ведет себя как консоль для ввода и вывода. (царапины головы) – 2015-12-02 17:50:45

+5

Вопрос четко указывает на «консольное приложение» _ и заменяет его на что-то еще только для целей отладки, где я даже не могу «Console.ReadKey()» просто смехотворно! – MickyD

0

Я знаю, что это всего лишь еще один ответ, но я подумал, что напишу что-нибудь для новых веб-разработчиков, которые могут запутаться в части «Переход на приложение Windows», потому что по умолчанию я полагаю приложение MVC в Visual Studio 2013 по умолчанию используется тип вывода библиотеки классов.

Мое веб-приложение по умолчанию устанавливается как тип вывода «Библиотека классов». Вам не нужно это менять. Все, что мне нужно было сделать, это следовать рекомендациям «Инструменты»> «Параметры»> «Отладка»> «Перенаправить все текст окна вывода» в окно «Немедленное». Затем я использовал предложение System.Diagnostics.Trace от Joel Coehoorn выше.

0

Вместо этого вы можете собрать результат в результате теста.

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

Если ваша цель - отладка, это небольшой способ предложить повторяемый сценарий отладки.

namespace Commandline.Test 
{ 
    using Microsoft.VisualStudio.TestTools.UnitTesting; 

    [TestClass] 
    public class CommandlineTests 
    { 
     [TestMethod] 
     public void RunNoArguments() 
     { 
      Commandline.Program.Main(new string[0]); 
     } 
    } 
} 
1

Убедитесь чеке «Перенаправление всех выходных ...» флажок в отладкой настройки окна:

Make sure the check the "**Redirect All Output...**" checkbox in the debugging setting windows:

+7

Что забавно, это было предложено около 7 лет назад по этому вопросу, это не сработало, и теперь это не работает :) –