IT story

Visual Studio의 출력 창에 쓰기

hot-time 2020. 2. 9. 19:23
반응형

Visual Studio의 출력 창에 쓰기


디버깅 목적으로 출력 창에 메시지를 쓰려고합니다. Java와 같은 기능을 검색했습니다 system.out.println(""). 나는 시도 Debug.Write, Console.WriteTrace.Write. 오류는 발생하지 않지만 아무 것도 인쇄하지 않습니다.

"DEBUG 상수 정의"및 "TRACE 상수 정의"옵션이 선택되어 있습니다.

메뉴 도구옵션디버깅"모든 출력 창 텍스트를 즉시 창으로 리디렉션" 옵션이 선택되어 있지 않습니다.

구성 : 활성 (디버그)

참고 : 관련이있는 경우 마법사를 사용하여 "Windows Forms 응용 프로그램"으로 프로젝트를 만들었습니다. 어디서 볼지 모르겠습니다.


System.Diagnostics네임 스페이스를 추가하면 Debug.WriteLine()IDE의 출력 창에 메시지를 빠르게 인쇄하는 데 사용할 수 있습니다 . 자세한 내용은 다음을 참조하십시오.


디버그 출력 창에 기록됩니다.

using System.Diagnostics;

Debug.WriteLine("Send to debug output.");

사용하다:

System.Diagnostics.Debug.WriteLine("your message here");

Debug.WriteLine

당신이 찾고있는 것입니다.

그렇지 않은 경우 다음을 수행하십시오.

메뉴 도구옵션디버깅즉시 출력을 보냅니다를 선택 취소 합니다.


나를 위해 디버그 네임 스페이스가 아닌 Trace 네임 스페이스 작동했습니다.

System.Diagnostics.Trace.WriteLine("message");

Visual Studio 2010에서 C # 프로젝트로 작업하고 있습니다.


당신은 찾고 있습니다

MessageBox.Show()

또는

Debug.Writeline()

호출

System.Diagnostics.Debug.WriteLine("message");

.NET Core (V 1.0 또는 1.1) 작업시 실패합니다 .

에서 로거를 만들어 사용해야하는데 Microsoft.Extensions.Logging해당 로그는 Visual Studio의 출력 창이 아닌 dotnet.exe 팝업 콘솔 창에만 나타납니다.


여기에는 Serilog 와 같은 타사 프레임 워크가 필요 하지만 그럼에도 불구하고 볼 수있는 곳으로 출력 하는 것이 매우 부드러운 경험 이라는 것을 알았 습니다.

먼저 Serilog의 Trace sink 를 설치해야합니다 . 일단 설치되면 다음과 같이 로거를 설정해야합니다.

Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Trace()
    .CreateLogger();

다른 최소 레벨을 설정하거나 구성 값 또는 일반 Serilog 기능으로 설정할 수 있습니다. Trace구성을 대체 하도록 로거를 특정 레벨로 설정 하거나이를 수행 할 수도 있습니다.

그런 다음 메시지를 정상적으로 기록하면 출력 창에 표시됩니다.

Logger.Information("Did stuff!");

이것은 큰 문제는 아닌 것 같으므로 몇 가지 추가 장점을 설명하겠습니다. 나에게 가장 큰 것은 출력 창과 콘솔에 동시에 로그인 할 수 있다는 것입니다 .

Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Trace()
    .WriteTo.Console(standardErrorFromLevel: LogEventLevel.Error)
    .CreateLogger();

이 모든 내 전화를 복제 할 필요없이, 내게 출력을 소비하는 방법의 측면에서 유연성을 주었다 Console.WriteDebug.Write. 코드를 작성할 때 Visual Studio에서 명령 줄 도구를 실행할 때 출력이 종료 될 때 출력을 잃을 염려가 없습니다. 배포하고 무언가를 디버깅해야하고 Visual Studio를 사용할 수 없었을 때 콘솔 출력을 쉽게 사용할 수있었습니다. 예약 된 작업으로 실행될 때 동일한 메시지를 파일 (또는 다른 종류의 싱크)에 기록 할 수도 있습니다.

결론은 Serilog를 사용하여 여러 대상에 메시지를 덤프하는 것이 매우 쉬워서 실행 방법에 관계없이 항상 출력에 쉽게 액세스 할 수 있다는 것입니다.

또한 최소한의 설정 및 코드가 필요합니다.


이것은 원래 질문에 대한 답변이 아닙니다. 그러나 대화 형으로 객체 데이터를 덤프하는 방법을 검색 할 때이 질문을 찾았으므로 다른 사람들 이이 유용한 대안을 언급하면 ​​도움이 될 수 있다고 생각했습니다.

궁극적으로 명령 창을 사용하고 Debug.Print아래와 같이 명령을 입력했습니다 . 이것은 텍스트로 복사 할 수있는 형식으로 메모리 객체를 인쇄했는데 실제로 필요한 것입니다.

> Debug.Print <item>

  id: 1
  idt: null
  igad: 99
  igbd: 99
  gl_desc: "New #20"
  te_num: "1-001-001-020"

다음은 Visual Studio 2015에서 나를 위해 일했습니다.

OutputDebugStringW(L"Write this to Output window in VS14.");

여기서 OutputDebugStringW에 대한 문서를 읽으 십시오 .

enter image description here이 방법은 코드를 디버깅하는 경우에만 작동합니다 ( debug mode).


Visual Studio의 출력 창으로 인쇄하십시오.

Debug.Writeline();

디버깅 목적으로 System.Diagnostics.Debug.Writeline()디버그 리스너가 없으면 명령이 릴리스 버전의 코드로 컴파일되지 않습니다. 디버그 모드에서 실행될 때 VS 출력 창을 포함하는 모든 추적 리스너에 씁니다.

콘솔 응용 프로그램의 경우. Console.Writeline()작동하지만 출력은 바이너리 버전의 릴리스에서 여전히 생성됩니다.

테스트를 디버깅 할 때 디버그 출력도 일반 출력 창에 나타납니다. 반면에 console.writeline 출력은 그렇지 않지만 테스트 출력 창에서 찾을 수 있습니다.

참고 URL : https://stackoverflow.com/questions/9466838/writing-to-output-window-of-visual-studio



반응형