2009-10-28 5 views
3

Visual Studio (표준 버전)에 액세스 할 수없는 Windows 응용 프로그램에 .NET Windows 응용 프로그램이 있으며이 응용 프로그램에만 설치할 수있는 유일한 방법은 Express입니다. Just-In-Time Debugging 옵션 (충돌시 디버그 버튼이있는 옵션). 따라서 스택 트레이스를보기 위해 실행할 수 있거나 첨부 할 수있는 Windows 응용 프로그램 디버깅 도구 또는 다른 것이 있는지 궁금합니다. 또한 내 응용 프로그램에서 PDB을 활성화했지만 자세한 정보를 제공하지 않으므로 처리되지 않은 예외로 인한 내 충돌을 추적 할 수 있습니다..NET 응용 프로그램의 스택 추적을 보는 방법

답변

3

을 windbg를 사용하고

+1

중간 개발자들조차 어려울 수 있습니다. 어쩌면 그들은 DebugDiag 또는 다른 도구를 사용하여 크래시 덤프를 생성하고 WinDbg로 분석 할 수 있습니다. 그런 다음 간단한 "analyze -v"로 예외 정보를 출력 할 수 있습니다. –

+0

Windbg에서 회선 번호를 생성 할 수 있습니까? 메소드 이름을 얻을 수는 있지만 라인 번호는 가져올 수 없기 때문입니다. – paradisonoir

+0

기호가있는 경우에만 디버그 모드로 빌드해야합니다. –

1

당신은 당신은 또한 CLR Profiler

+0

Stacktrace의 내용에 대해 좋은 결과를 제공합니까? 클래스 및 행 번호와 같은 이유로 내 크래시가 처리되지 않은 것입니다. – paradisonoir

+0

@paradisonoir : Fyi, 행 번호는 어셈블리의 pdb가있는 경우에만 사용할 수 있습니다. 그렇지 않으면 스택 위치와 메소드 이름 만 가져옵니다. – eduncan911

+0

+1은 OP의 문제를 해결하는 무료 프로파일 러를 언급하는데, 즉 스택 추적을 표시합니다. 기록을 위해, 여기 CLR Profiler 2.0에 대한 링크가 있습니다 : http://tinyurl.com/ClrProfiler2 – galaktor

0

은 아마 EQATEC Tracer가 당신을 도울 수 sos.dll 수 있습니다 시도 할 수 있습니다.

+0

응용 프로그램을 시작했지만 충돌이 발생한 후 내 스택 추적의 출력이 없습니다. – paradisonoir

+0

링크가 끊어졌습니다. –

6

예외를 catch하는 경우 예외 개체에는 스택 추적 (Exception.StackTrace)이 포함됩니다. 또한 Environment.StackTrace으로 액세스 할 수 있습니다.

아래 코드에는 스택 추적을 포함하여 예외를 이벤트 로그에 기록하는 처리되지 않은 예외에 대한 이벤트 처리기가 있습니다.

// Sample for the Environment.StackTrace property 
using System; 

class Sample 
{ 
    public static void Main() 
    { 
     AppDomain.CurrentDomain.UnhandledException += 
      new UnhandledExceptionEventHandler(UnhandledExceptions); 

     Console.WriteLine("StackTrace: '{0}'", Environment.StackTrace); 
     throw new Exception("Fatal Error"); 
    } 

    static void UnhandledExceptions(object sender, UnhandledExceptionEventArgs e) 
    { 
     string source = "SOTest"; 
     if (!System.Diagnostics.EventLog.SourceExists(source)) 
     { 
      System.Diagnostics.EventLog.CreateEventSource(source, "Application"); 
     } 

     System.Diagnostics.EventLog log = new System.Diagnostics.EventLog(); 
     log.Source = source; 

     log.WriteEntry(e.ExceptionObject.ToString(), 
         System.Diagnostics.EventLogEntryType.Error); 
    } 
+0

그래서 일부 처리되지 않은 예외도 인쇄 할 수 있습니까? – paradisonoir

+0

예. 로깅 프레임 워크를 사용하여 오류 로그에 기록 할 수도 있습니다. –

+0

@paradisonoir - 로그 (스택 추적 포함)를 이벤트 로그에 기록하는 처리되지 않은 예외 이벤트 처리기를 추가했습니다. –

1

.NET 응용 프로그램 예외 스택 스택은 이벤트 뷰어의 응용 프로그램 아래에 기록됩니다.

alt text http://eduncan911.com/blog/thumbnail/exception-in-iis-stackoverflow-logs.png

+0

예외가 발생했을 때 당신이 직접 로그하면 끝이 난다고 생각합니다! –

+0

내 앱에서 예외가 발생했는데 여기서는 표시되지 않습니다. – eduncan911

+0

또한 내 ASP.net 응용 프로그램은 처리되지 않은 예외를 이벤트 로그에 자동으로 기록합니다. 코드가 필요하지 않습니다. – pyrocumulus

0

사용 :

.NET Framework 2.0 SDK에는 Microsoft CLR Debugger가 함께 제공됩니다. 그것은 Visual Studio 디버거와 비슷하게 작동합니다 (소스 파일은 읽기 전용 임에도 불구하고). 그래서 시도해 볼 수 있습니다.

+0

응용 프로그램에 전역 예외 처리기를 추가 할 수도 있습니다. http://blogs.msdn.com/lexli/archive/2009/04/28/how-to-handle-net-unhandled-exceptions-gracefully.aspx –

관련 문제