Visual Studio의 출력 창에 쓰기


605

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

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

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

구성 : 활성 (디버그)

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


32
사용을 시도Debug.WriteLine()
니콘 칸티 폴

9
이 글은 오래된 글이므로 질문에 걸려 넘어지는 사람들을위한 주석으로 추가하겠습니다. 실제로 코드를 변경하는 대신 추적 점이라는 특수 중단 점을 사용할 수도 있습니다.

13
Debug.WriteLine ()은 디버그에서 실행될 때만 작동한다는 것을 상기시켜줍니다. 그것은 CTRL-F5가 아니라 F5로 실행하는 것을 의미합니다. 이것은 놓치기 쉽다.
kirk.burleson

3
사실이지만 편리한 도구는 DebugView 이며 디버거 외부에서 실행할 때 디버그 스트림에 모든 출력을 표시합니다.
the_mandrill

2
Visual Studio 테스트 프레임 워크에서 실행되는 단위 테스트의 출력을 쓰려고하면 규칙이 약간 다릅니다 . 자세한 내용 은 이 답변 을 참조하십시오.
yoyo

답변:


754

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


2
감사합니다. 디버깅하지 않고 시작하면 출력에 쓸 수있는 방법이 없다고 가정합니다 (ctrl-f5)?
previous_developer

1
: 난 당신이 찾고있는 것 같아요 stackoverflow.com/questions/562590/...
Bhargav 바트에게

다시 한번 감사하지만 그것은 저에게 효과적이지 않습니다. TRACE 상수가 정의 된 경우에도 디버그 모드없이 추적이 인쇄되지 않습니다.
previous_developer

여기에 작은 앱을 실행하면 나에게 잘 작동합니다. 아마도 환경에 작은 결함이 있습니까?
Bhargav Bhat

1
이것은 내 테스트 코드입니다. pastebin.com/b7P0bYEa 그것은 매우 간단하지만 여전히 아무것도 아닙니다. 다른 시스템에서 시도하겠습니다.
previous_developer

154

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

using System.Diagnostics;

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

6
나를 위해 이것은 직접 실행 창에 "출력"
nuander

나는 단위 테스트 세트에서 이것을 시도했다. 선택한 테스트를 디버깅했지만 디버그 창에 인쇄하려고 시도한 것이 없습니다.
Frank H.

그러나 웹 페이지를 닫은 후에 만 ​​디버그 창에 출력됩니다. 코드를 실행할 때 즉시 표시하고 싶습니다. 잠깐만-코드가 실행되는 동안 출력 창이 숨겨져 있음을 발견했습니다. 창을 표시하면 출력이 나타납니다.
Joe Cotton

디버그 창에 인쇄 된이 메시지의 로그를 유지할 수 있습니까? 또는 Visual Studio에서 디버그 창의 로그에 액세스하는 방법을 제공합니까?
Anmol Rathod

82

사용하다:

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

55
Debug.WriteLine

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

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

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


1
아마도 Debug.Write ()가 캐리지 리턴을 삽입하지 않아 메시지가 버퍼링됩니까?
Guy Starbuck

2
Micah가 말한 것을 수행 할 때까지 Debug.WriteLine ( "String")을 보지 못했습니다. Tools|Options|Debugging uncheck Send Output to Immediate
Skindeep2366

3
나중 버전에서 확인란은 "모든 출력 창 텍스트를 즉시 창으로 리디렉션"이라고 생각합니다
Houdini Sutherland

6
VS 2015에서는 '모든 출력 창 텍스트를 즉시 창으로 리디렉션'이라고합니다. 일부 경우 적절한 설정을 찾기 위해 5 분을 찾아야했습니다. :)- "로 시작하는 옵션을 찾기 위해 위아래로 스크롤했습니다. 보내기 ... ":)
dba

22

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

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

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


2
VS 2013 Professional을 사용하고 Visual Studio 단위 테스트 프레임 워크를 사용하여 단위 테스트에서 출력을 얻으려고합니다. 테스트 하네스는 Debug.WriteLine을 캡처하고 리디렉션하지만 Trace.WriteLine은 리디렉션하지 않는 것으로 보입니다. 그리고 테스트를 디버그하지 않으면 추적 출력이 표시되지 않습니다.
yoyo

15

당신은 찾고 있습니다

MessageBox.Show()

또는

Debug.Writeline()

8
MessageBox.Show()디버깅 목적으로 여러 값을 쓰려고 할 때 매우 성 가실 수 있습니다.
치매

4
질문은 "Visual Studio의 출력 창에 쓰는 중입니까?" 메시지 상자가 아닙니다.
Amir Touitou

@AmirTwito 메시지 상자는 출력 창입니다.
ProfK

4
예, 맞습니다. 그러나 질문은 "Visual Studio의 출력 창에 쓰기?" 아니라이 코드를 사용하여 간단한 메시지 상자 : () MessageBox.Show
아미르 Touitou

4
@ProfK Visual Studio Output Window 는 특정 프로그램의 매우 특정한 GUI 요소이며 MessageBox.Show쓰지 않습니다.
jpmc26

9

호출

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

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

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


따라서 Debug.WriteLine (), Console.WriteLine () 및 Trace.WriteLine ()은 .Net Core의 출력에서 ​​아무것도 출력하지 않습니까? Logclass를 작성하지 않고도 간단한 로깅을 사용할 수 있습니까? 도구> 옵션> 디버깅에서 검색하여 가능한 해결책은 "출력 결과 ::"를 확인하십시오.
Wouter Vanherck

4

여기에는 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를 사용하여 여러 대상에 메시지를 덤프하는 것이 매우 쉬워서 실행 방법에 관계없이 항상 출력에 쉽게 액세스 할 수 있다는 것입니다.

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


1
Serilog에는 github.com/serilog/serilog-sinks-debug에 "debug"싱크 가있어 비슷한 방식으로 작동하지만 형식이 약간 더 좋습니다 :-) HTH!
Nicholas Blumhardt

왜 .net public (정적 일 수도 있음) 메소드를 만들고 Console.Write 또는 Debug.Write 등 필요한 모든 것을 넣고 어디에서나 사용합니까?
Saulius 2019

@Saulius "일정 된 작업으로 실행될 때 동일한 메시지를 파일 (또는 다른 종류의 싱크)에 기록 할 수도 있습니다. 결론은 Serilog를 사용하여 메시지를 여러 곳에 쉽게 덤프 할 수 있다는 것입니다. 어떻게 실행하든 항상 출력에 쉽게 액세스 할 수 있도록합니다. "
jpmc26

1

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

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

> Debug.Print <item>

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


0

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

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

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

여기에 이미지 설명을 입력하십시오 이 방법은 코드를 디버깅하는 경우에만 작동합니다 ( debug mode).


11
C ++입니까? 질문에 c # 태그가 지정되어 있습니다.
jpmc26

0

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.