System.Diagnostics.Debug.Write 출력은 어디에 나타 납니까?


147

다음과 같은 C # 프로그램 (로 빌드 됨 csc hello.cs) Hello via Console!은 콘솔과 Hello via OutputDebugStringDebugView 창 에서만 인쇄 됩니다. 그러나 두 System.Diagnostics.*통화 중 하나를 볼 수 없습니다 . 왜 그런 겁니까?

using System;
using System.Runtime.InteropServices;
class Hello {
    [DllImport("kernel32.dll", CharSet=CharSet.Auto)]
    public static extern void OutputDebugString(string message);

    static void Main() {
        Console.Write( "Hello via Console!" );
        System.Diagnostics.Debug.Write( "Hello via Debug!" );
        System.Diagnostics.Trace.Write( "Hello via Trace!" );
        OutputDebugString( "Hello via OutputDebugString" );
    }
}

특별한 명령 행 스위치가 필요할 수 csc있습니까?

개발에 Visual Studio를 사용하지 않고 있으며 이것은 순수한 명령 줄입니다.


다른 답변에서 일부 의견에서 언급했듯이 Microsoft의 (SysInternals) DebugView를 사용할 수 있습니다. technet.microsoft.com/en-us/sysinternals/bb896647.aspx
George Birbilis

답변:


77

다른 사람들이 지적했듯이 이러한 스트림을 읽으려면 리스너를 등록해야합니다. 또한주의 Debug.Write경우 생성만이 기능을 DEBUG하면서 빌드 플래그가 설정되어있는 Trace.Write경우에만 함수한다면 TRACE빌드 플래그가 설정됩니다.

Visual Studio의 프로젝트 속성에서 또는 csc.exe에 다음 인수를 제공 하여 DEBUG및 / 또는 TRACE플래그를 쉽게 설정할 수 있습니다.

/define:DEBUG;TRACE


5
Debug 및 Trace 객체가 동일한 추적 리스너를 사용하므로 Debug.Write 및 Trace.Write 출력이 동일한 위치에 있음을 알면 유용합니다 (예상치 않았습니다). 그들이 실행되지 않을 수도있는 조건에
hello_earth

1
그들이 어떤 조건 인지 자세히 설명해 주 시겠습니까? 정확히 어떤 상황에서 debug.Write가 trace.write와 동일하게 작동하지 않습니까?
Pacerier

2
이것은 나를 위해 작동하지 않습니다, 나는 프로젝트 속성 대 디버그 및 추적 플래그를 설정하고 Debug.WriteLine을 사용하고 있습니다. 라인이 실행되지만 출력 창에 아무것도 나타나지 않습니다. 다른 조언이 있습니까?
f1wade

114

디버깅하는 동안 System.Diagnostics.Debug.WriteLine출력 창에 표시됩니다 ( Ctrl+ Alt+O )에 컬렉션에 a TraceListener를 추가하여 다른 위치에서 출력 할 호출을 Debug.Listeners지정할 수도 있습니다 Debug.WriteLine.

참고 : 도구옵션디버깅일반Debug.WriteLine 메뉴에서 Visual Studio 옵션 "모든 출력 창 텍스트를 즉시 창으로 리디렉션"이 선택된 경우 호출이 출력 창에 표시되지 않을 수 있습니다 . "표시하려면 도구옵션디버깅 ", "옆에있는 상자를 선택 도구옵션보기 모든 설정 ".


4
난 비주얼 스튜디오 2012에서 디버깅하는 동안 출력 창을 가져올 것이다 (Ctrl + Alt + O)를 확인하고 싶습니다
이시카와

45

TraceListener콘솔에 표시 되려면를 추가해야합니다 .

TextWriterTraceListener writer = new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(writer);

디버그 모드 일 때 Visual Studio 출력 창에도 나타납니다.


2
: 분명히 DebugView와는 .NET Debug.Write () 및 Win32 OutputDebugString로 () 모두 캡처 technet.microsoft.com/en-us/sysinternals/bb896647
dlchambers

@ dlchambers : 나는 그것이 맞지 않다고 생각합니다. 그 페이지는 OutputDebugString()(커널)의 표시를 주장DbgPrint().
Mike C

1
@dlchambers : 나는 의견을 철회한다. 캡처 설정에 "Global Win32"가 포함되어있는 Debug.Write() 경우 DebugView가 캡처 할 수 있음을 발견했습니다 .이를 관리자 모드로 실행해야합니다.
Mike C

10

Visual Studio에서 디버깅하는 동안 "출력"창 (보기-> 출력)을 표시하십시오. 거기에 표시됩니다.



5

debug.write ( "")를 쓸 때 직접 실행 창 "이 아닌"출력 창에 "코드에서, 그것은에 출력합니다."

시도해 볼 수 있습니다. "즉시"창을 표시합니다 ( 디버그즉시 ).


2

내 경우의 해결책은 다음과 같습니다.

  1. 출력 창을 마우스 오른쪽 버튼으로 클릭하십시오.
  2. '프로그램 출력'을 확인하십시오

0

VB.NET의 경우 다음이 적용됩니다. "디버그"를 선택하고 "디버깅 시작"인지 확인해야합니다. 이 버튼을 누르면 도달 할 수 있습니다 F5.

또한 Console.WriteLine은 출력 창에서 "릴리스"로 빌드 할 때만 메시지를 표시합니다.

앞에서 언급했듯이 ViewOutput으로 Output 창을 열고 Console.WriteLine 메시지를 보려면 "Build"를 선택하고 Debug.WriteLine 또는 Trace.WriteLine 메시지를 보려면 "Debug"를 선택하십시오.

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