2011-09-26 2 views
1

이 기술에 대해 많이 알지 못하며 예외 스택이 표시되는 방법을 찾지 못했습니다. 따라서 체인 된 예외 스택 예제

, 몇 가지 기본적인 질문 :
  • 방법은 2 개 독립적 인 연속 예외

    표시됩니다?
  • 몇 가지 연결 예외가 어떻게 표시됩니까?
  • 은 스택의 상단 또는 하단에 표시되는 근본 원인입니까?
+1

"체인으로 연결된"으로 무엇을 말하고 있습니까? [Exception.InnerException] (http://msdn.microsoft.com/en-us/library/system.exception.innerexception.aspx) 속성을 의미합니까? –

답변

3

직접 해보기가 쉽습니다. 예를 들어 :

using System; 

class Test 
{ 
    static void Main(string[] args) 
    { 
     try 
     { 
      Top(); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e); 
     } 
    } 

    static void Top() 
    { 
     try 
     { 
      Middle(); 
     } 
     catch (Exception e) 
     { 
      throw new Exception("Exception from top", e); 
     } 
    } 

    static void Middle() 
    { 
     try 
     { 
      Bottom(); 
     } 
     catch (Exception e) 
     { 
      throw new Exception("Exception from middle", e); 
     } 
    } 

    static void Bottom() 
    { 
     throw new Exception("Exception from bottom"); 
    } 
} 

결과 (이 충분히 있다면 첫 두 줄을 한 줄에있을 것이다) : 두 개의 독립적 인 연속 예외가 발생하는 경우

System.Exception: Exception from top ---> System.Exception: Exception from middle 
     ---> System.Exception: Exception from bottom 
    at Test.Bottom() in c:\Users\Jon\Test\Test.cs:line 43 
    at Test.Middle() in c:\Users\Jon\Test\Test.cs:line 33 
    --- End of inner exception stack trace --- 
    at Test.Middle() in c:\Users\Jon\Test\Test.cs:line 37 
    at Test.Top() in c:\Users\Jon\Test\Test.cs:line 21 
    --- End of inner exception stack trace --- 
    at Test.Top() in c:\Users\Jon\Test\Test.cs:line 25 
    at Test.Main(String[] args) in c:\Users\Jon\Test\Test.cs:line 9 
+0

내가 정확히 설명하려고했던 것. 끝내기 터치 : https://ideone.com/99sKB – sehe

+0

외부 C# /. Net 프로그램을 사용하고 있는데, 이에 대한 환경 설정이 필요하지 않습니다 (따라서 내 질문;) – Rolf

+0

@ 롤프 : 너 .NET을 어디서나 설치하지 않으셨습니까? 당신이 필요로하는 것은 프레임 워크와 메모장입니다 ... –

0

, 첫 번째가 정상을 중단합니다 처리 될 때까지 프로그램의 실행. 그런 다음 두 번째 예외는 프로그램이 첫 번째 예외로 종료되지 않은 경우 동일한 방식으로 throw됩니다.

연결 예외의 경우 마지막으로 throw 된 예외가 표시되지만 다른 예외를 처리 할 때 마지막 예외가 throw됩니다. 예를 들면 다음과 같습니다.

스택의 맨 위에는 BarException이 표시되고 하단에는 FooException이 표시됩니다. 희망 나는 아무것도 놓치지 않았다.

관련 문제