Pergunta

Ao fazer um aplicativo de console em Java com o Eclipse, vejo a saída sendo colocada em uma caixa de texto no próprio IDE, em vez de ter um console surgindo como no Visual Studio. Isso é útil, pois mesmo depois que o programa sai, ainda posso fazer bom uso do texto que foi escrito nele, pois não é apagado até que eu o execute novamente. É possível conseguir algo assim com o Visual Studio? Eu sei disso em vez de fazer

System.Console.WriteLine(str);

eu posso fazer

System.Diagnostics.Debug.WriteLine(str);

Mas não é exatamente a mesma coisa, pois você recebe muito "lixo" na janela de saída, como todos os símbolos carregados e tal.

Melhor ainda, é possível fazer tudo no próprio IDE, quando você executa seu aplicativo, em vez de fazer o console em execução?

Foi útil?

Solução

Na caixa de diálogo Ferramentas -> Opções do Visual Studio -> depuração -> Verifique o "Redirecionar todo o texto da janela de saída para a janela imediata".

Outras dicas

No Estúdio visual Caixa de diálogo Opções -> Depuração -> Verifique o "Redirecionar todo o texto da janela de saída para a janela imediata". Em seguida, vá para as configurações do seu projeto e altere o tipo de "aplicativo de console" para "aplicativo do Windows". Nesse ponto, o Visual Studio não abre mais uma janela de console e a saída é redirecionada para a janela de saída no Visual Studio. No entanto, você não pode fazer nada "criativo", como solicitar a entrada de chave ou texto ou limpar o console - terá exceções de tempo de execução.

Usar System.Diagnostics.Trace

Dependendo de quais ouvintes você anexar, a saída de rastreamento pode ir para a janela de depuração, o console, um arquivo, banco de dados ou tudo de uma só vez. As possibilidades são literalmente infinitas, pois a implementação de seu próprio tracelistener é extremamente simples.

Certifique -se de verificar o "Redirecionar toda a saída ..."Caixa de seleção no Windows de configuração de depuração:

Make sure the check the

Você pode criar um aplicativo de wrapper que você executa em vez de executar diretamente seu aplicativo real. O aplicativo Wrapper pode ouvir o stdout e redirecionar tudo para rastrear. Em seguida, altere as configurações de execução para iniciar seu invólucro e passe no caminho para o aplicativo real para ser executado.

Você também pode ter o wrapper automaticamente o depurador do novo processo se um depurador estiver anexado ao invólucro.

Sei que essa é apenas mais uma resposta, mas pensei em escrever algo para os novos desenvolvedores da web, que podem ficar confusos sobre a parte "Alterar para um aplicativo do Windows", porque acho que por padrão um aplicativo MVC no Visual Studio 2013 Padrões para um tipo de saída da biblioteca de classes.

Meu aplicativo da Web por padrão é definido como um tipo de saída da "Biblioteca de Classe". Você não precisa mudar isso. Tudo o que eu precisava fazer era seguir as sugestões de ir a ferramentas> Opções> Depuração> Redirecionar todo o texto da janela de saída para a janela imediata. Eu então usei o System.Diagnostics.Trace Sugestão de Joel Coehoorn acima.

Uma solução simples que funciona para mim, para trabalhar com habilidade do console (readkey, string com formato e arg etc) e ver e salvar a saída:

Eu escrevo textwriter que escreve para Console e para Trace e substitua o Console.Out com isso.

Se você usar a caixa de diálogo -> Depuração -> Verifique o "redirecionar todo o texto da janela de saída para a janela imediata", você o obtém na janela imediata e bastante limpo.

Meu código: no início do meu código:

   Console.SetOut(new TextHelper());

e a aula:

public class TextHelper : TextWriter
    {
        TextWriter console;

        public TextHelper() {
            console = Console.Out;
        }

        public override Encoding Encoding { get { return this.console.Encoding; } }
        public override void WriteLine(string format, params object[] arg)
        {
            string s = string.Format(format, arg);
            WriteLine(s);
        }
        public override void Write(object value)
        {
            console.Write(value);
            System.Diagnostics.Trace.Write(value);
        }

        public override void WriteLine(object value)
        {
            Write(value);
            Write("\n");
        }
        public override void WriteLine(string value)
        {
            console.WriteLine(value);
            System.Diagnostics.Trace.WriteLine(value);

        }

    }

Nota: Eu substituo exatamente o que eu precisava, se você escrever outros tipos, você deve substituir mais

Em vez disso, você pode coletar a saída em um resultado de teste.

Você não pode fornecer entrada, mas pode facilmente fornecer vários testes com diferentes argumentos da linha de comando, cada teste coletando a saída.

Se seu objetivo é a depuração, essa é uma maneira de baixo esforço de oferecer um cenário de depuração repetível.

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

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

É hora de verificar os lançamentos mais recentes para o Visual Studio, pessoal. A solução mais sugerida que não funcionou para alguns de vocês antes pode funcionar agora.

No Visual Studio 2017 (Libere a versão 15.4.2 e acima), indo para Tools > Options > Debugging > General > (Check Box) Redirect all Output Window text to Immediate Window trabalhou para mim.

Poucas notas: 1. Para ver a janela imediata, verifique se você está em Depuração modo. 2. Agora deve haver outras 3 ferramentas de depuração disponíveis à sua disposição, a saber, pilha de chamadas, pontos de interrupção e janela de comando, como mostrado abaixo:

enter image description here

Muitas felicidades!

Etapa 1: Clique com o botão direito do mouse no nome do projeto no Solution Explorer e faça o tipo de saída como aplicativo de janela

Etapa 2: Debug-> Opções ..--> Depuração (expandir)-> Geral-> Redirecionar todo o texto da janela de saída para a janela imediata

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top