2012-12-22 4 views
2

디버그 모드 (F5)에서 VS2010Windows Forms 프로젝트를 빌드하면 출력 창이라는 창이 나타납니다. 출력 창 상단에는 "Find Message in Code", "Next Message"및 "Previous Message"버튼이 있습니다. 그러나 항상 회색으로 표시됩니다 (사용할 수 없음). 어떻게 활성화 될 수 있습니까?VS 2010 - 출력 창 - "코드에서 메시지 찾기"버튼을 활성화하는 방법?

나는이 버튼의 의도가 메시지를 출력 창에 표시하는 코드 줄을 찾는 데 도움이 될 것으로 기대합니다. 예를 들어 클라이언트 코드에 Trace.WriteLine("MyMessage");을 쓰면 실행될 때 'MyMessage'이 Output Window에 표시됩니다. 출력 창에서 메시지를 선택하고 ""이 포함 된 클라이언트 코드 줄로 이동하여 "Find message in Code"을 클릭하면됩니다. 이 기능이 활성화되어 있고 내 가정이 정확하다면 이는 매끄러운 기능입니다. 불행히도 버튼을 활성화 할 수 없습니다.

이 질문에 대답하려면이 버튼을 활성화하고 사용하는 방법과 모범 사례를 적용해야하는지 (옵션) 설명하십시오.

다음은 참고 자료로 사용할 수있는 몇 가지 소스 코드입니다. Windows Forms 프로젝트를 만들고 아래 내용을 변경하면 내가 시도하고있는 것을 재현 할 수 있습니다.

// program.cs 

using System; 
using System.Diagnostics; 
using System.Windows.Forms; 

namespace MyNamespace 
{ 
    internal static class Program 
    { 
     [STAThread] 
     private static void Main() 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      try 
      { 
       throw new ApplicationException("MyMessage"); 
       Application.Run(new FormMain()); 
      } 
      catch (ApplicationException e) 
      { 
       Trace.WriteLine(e.ToString()); 
      } 
     } 
    } 
} 

내가

Trace.WriteLine("Program.cs" + "(" + 23 + ")" + " Some info"); 

끝 JasonD 솔루션

Trace.WriteLine(e.ToString()); 

을 대체

JasonD의 추천 - 결과 : 버튼이 활성화

해결했습니다. 그리고 예기치 못한 대답. 강력하게 형식화 된이 시대에 응답은 마법 메시지로 문자열을 형식화하는 것에 달려 있습니다. 나는 이것에 놀랐다.

답변

3

구문 분석 할 수있는 내용을 출력해야합니다. 컴파일 할 때 표시되는 오류/경고 메시지와 본질적으로 같은 형식이며, "FILENAME(LINE) stuff"으로 구성됩니다. 이 같은

C#에서

, 뭔가 :

 string file_= new System.Diagnostics.StackTrace(true).GetFrame(0).GetFileName(); 
     int line_= new System.Diagnostics.StackTrace(true).GetFrame(0).GetFileLineNumber(); 
     System.Diagnostics.Trace.WriteLine(file_+ "(" + line_.ToString() + ") Some info"); 

(이 좀 지저분하지만, 내가 찾은 C/C++의 __FILE____LINE__ 매크로의 좋은 동등한 없다)

당신이 할 수있는가 조금 깔끔하게 정리해서 함수에 넣으십시오. 그러나 실제 함수 자체가 아니라 호출자의 파일/행을 가져와야합니다.

static void traceFunc(string msg) 
    { 
     System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(true); 
     string file = trace.GetFrame(1).GetFileName(); 
     int line = trace.GetFrame(1).GetFileLineNumber(); 
     System.Diagnostics.Trace.WriteLine(file + "(" + line.ToString() + ") " + msg); 
    } 
+0

알았습니다. 감사합니다 JasonD, 내 솔루션을 표시하기 위해 내 게시물을 업데이 트합니다 – sapbucket

+0

JasonD, 버튼을 활성화하는 데 필요한 문자열 형식을 보여주는 URL을 제공 할 수 있습니까? 나는 인터넷 검색을하고 있었는데, URL을 찾을 수없는 것 같습니다. – sapbucket

+0

하나를 알지 못합니다. 방금 VS의 스타일을 복사했습니다. – JasonD