IT박스

콘솔 대신 Visual Studio에서 콘솔 응용 프로그램의 출력

itboxs 2020. 8. 2. 17:54
반응형

콘솔 대신 Visual Studio에서 콘솔 응용 프로그램의 출력


Eclipse를 사용하여 Java에서 콘솔 응용 프로그램을 수행 할 때 Visual Studio와 같이 콘솔이 팝업되는 대신 IDE 자체의 텍스트 상자에 출력이 표시됩니다. 이것은 프로그램이 종료 된 후에도 다시 작성된 후에도 지워지지 않기 때문에 작성된 텍스트를 잘 활용할 수 있으므로 편리합니다. Visual Studio로 이와 같은 것을 달성 할 수 있습니까? 나는 대신에

System.Console.WriteLine(str);

내가 할 수있는

System.Diagnostics.Debug.WriteLine(str);

그러나로드 된 모든 심볼과 같이 출력 창에 많은 "정크"가 표시되므로 완전히 같은 것은 아닙니다.

더 나은 방법은 콘솔을 실행하는 대신 응용 프로그램을 실행할 때 IDE 자체에서 모든 작업을 수행 할 수 있습니까?


도구-> Visual Studio 옵션 대화 상자-> 디버깅-> "모든 출력 창 텍스트를 즉시 창으로 리디렉션"을 확인하십시오.


에서 비주얼 스튜디오 옵션 대화 상자 -> 디버깅 ->은 "직접 실행 창에 리디렉션 모든 출력 창 텍스트"를 확인합니다. 그런 다음 프로젝트 설정으로 이동하여 유형을 "콘솔 응용 프로그램"에서 "Windows 응용 프로그램"으로 변경하십시오. 이 시점에서 Visual Studio는 더 이상 콘솔 창을 열지 않으며 출력은 Visual Studio의 출력 창으로 리디렉션됩니다. 그러나 키 또는 텍스트 입력 요청 또는 콘솔 지우기와 같은 "크리에이티브"작업은 수행 할 수 없습니다. 런타임 예외가 발생합니다.


사용하다 System.Diagnostics.Trace

연결하는 리스너에 따라 추적 출력은 디버그 창, 콘솔, 파일, 데이터베이스 또는 한 번에 모두 이동할 수 있습니다. 자신 만의 TraceListener를 구현하는 것이 매우 간단하므로 가능성은 문자 그대로 끝이 없습니다.


디버깅 설정 창에서 " Redirect All Output ... "체크 박스를 체크하십시오 :

디버깅 설정 창에서 "** Redirect All Output ... **"체크 상자를 체크하십시오 :


실제 앱을 직접 실행하는 대신 실행하는 랩퍼 애플리케이션을 작성할 수 있습니다. 랩퍼 응용 프로그램은 stdout을 청취하고 모든 것을 Trace로 경로 재 지정할 수 있습니다. 그런 다음 실행 설정을 변경하여 래퍼를 시작하고 실행할 실제 앱의 경로를 전달하십시오.

디버거가 랩퍼에 연결된 경우 랩퍼가 디버거를 새 프로세스에 자동 첨부하도록 할 수도 있습니다.


나는 이것이 또 다른 대답이라는 것을 알고 있지만 기본적으로 Visual Studio 2013의 MVC 응용 프로그램을 생각하기 때문에 "Windows 응용 프로그램으로 변경"부분에 대해 혼란 스러울 수있는 새로운 웹 개발자를 위해 뭔가 적어 놓을 것이라고 생각했습니다. 기본적으로 출력 유형은 클래스 라이브러리입니다.

기본적으로 내 웹 응용 프로그램은 "클래스 라이브러리"의 출력 유형으로 설정됩니다. 변경할 필요가 없습니다. 내가해야 할 일은 도구> 옵션> 디버깅> 모든 출력 창 텍스트를 즉시 창으로 리디렉션하는 제안을 따르는 것입니다. 그런 다음 System.Diagnostics.Trace위에서 Joel Coehoorn 제안 을 사용했습니다 .


콘솔 기능 (ReadKey, String with Format and arg 등)으로 작업하고 출력을보고 저장하는 저에게 맞는 간단한 솔루션입니다.

나는 쓰기 것을 TextWriter에 쓰기 Console및에 Trace과가 교체 Console.Out그것.

대화 상자-> 디버깅-> "모든 출력 창 텍스트를 즉시 창으로 리디렉션"을 확인하면 즉시 창에 표시되어 깨끗합니다.

내 코드 : 내 코드 시작시 :

   Console.SetOut(new TextHelper());

그리고 수업 :

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

        }

    }

참고 : 필요한 것을 재정의하므로 다른 유형을 작성하면 더 많이 재정의해야합니다


대신 테스트 결과에서 출력을 수집 할 수 있습니다.

입력을 제공 할 수는 없지만 각 명령은 출력을 수집하는 여러 명령 줄 인수를 사용하여 여러 테스트를 쉽게 제공 할 수 있습니다.

목표가 디버깅이라면 반복 가능한 디버깅 시나리오를 제공하는 노력이 적습니다.

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

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

이제 Visual Studio의 최신 릴리스를 확인할 차례입니다. 이전에 일부 사용자에게는 효과가 없었던 가장 제안 된 솔루션이 지금 작동 할 수 있습니다.

In Visual Studio 2017 (Release Version 15.4.2 and above), going to Tools > Options > Debugging > General > (Check Box) Redirect all Output Window text to Immediate Window has worked for me.

Few Notes: 1. To see the Immediate Window, make sure that you are in Debugging mode. 2. There should now be 3 other debugging tools available at your disposal, namely, Call Stack, Breakpoints, and Command Window, as shown below:

여기에 이미지 설명을 입력하십시오

Best wishes!


Step 1: Right click on the Project Name in Solution Explorer then make the Output type as Window Application

Step 2: Debug-->Options..-->Debugging (Expand)-->General-->Redirect All Output Window Text to the Immediate Window

참고URL : https://stackoverflow.com/questions/2542599/having-the-output-of-a-console-application-in-visual-studio-instead-of-the-conso

반응형