2011-11-10 3 views
4

내가 스택 추적을 조사하고있어, 나는이 출력 건너 온 :예외 [0] :

Server stack trace: 
    ... 
    at MyProject.Data.Notifications.NotificationCache.InitialisedCache() in NotificationCache.cs: line 72 
    at System.Lazy`1.CreateValue() 

Exception rethrown at [0]: 
    at System.Lazy`1.get_Value() 
    at MyProject.Data.Notifications.NotificationCache.AddItemToCache(NotificationDto dto) in NotificationCache.cs: line 82 
bla bla bla 

누군가가 무엇을 Exception rethrown at [0]: 방법을 설명하고 몇 가지 간단한 시나리오가 어떻게 복제를 보여 주시겠습니까? 나는 try/catch/throw, try/catch ex/throw ex 등을 통해 그것을 복제하려했으나 할 수 없었다.

+1

NotificationCache.cs에서 82 행과 72 행 주위에 행을 게시 할 수 있습니까? –

+0

그것은 단지 예일뿐입니다. 나는 [0]에서 예외를 재현 할 때 undestand하고 싶습니다 : 무슨 일이 일어나고 있고 왜 거기에 있습니까? 나는 그것이 비동기 호출과 무언가를 가지고 있을지도 모른다고 생각하지만 틀릴 수도있다. 이 특별한 경우에 개인 메소드 Lazy 의 소스 코드를 발견했습니다 .CreateValue http://typedescriptor.net/browse/members/249448-System.Lazy%601%5BT%5D.CreateValue%28%29#하지만 왜 그것이 [0]에서 재 해석 된 예외를 인쇄하는지 모르겠다. 그리고 재실행을하는 나의 간단한 콘솔 어플리케이션 예제는 그것을하지 않는다. – xhafan

+0

예, 82 번 라인은 재연이 발생하는 곳입니다. 귀하의 질문에 82 행 주위에 게시하여 코드를 확인하여 코드를 다운로드하고 행을 계산할 필요가 없습니까? (카운트가 해제 될 수 있도록 추가 또는 제거했는지 여부도 알 수 없음) –

답변

4

Lazy<T>.CreateValueException.PrepForRemoting()을 호출합니다. 여기서 [0] 비트에서 다시 예외 처리가 추가됩니다. 이것은 저자의 입장에서 다소 이상한 디자인 선택이지만 아마도 예외를 야기한 코드와이를 호출 한 코드를 모두 볼 수있는 "split"스택 추적을 얻는 방법으로 사용했을 것입니다 , 전자가 대리인을 통해 호출된다는 사실에도 불구하고.

+0

위대함! 스택 추적에 단순히 문자열을 추가하는 코드를 발견했습니다. http://typedescriptor.net/name/members/1168BF1E465B5ACA5B5B4CFAB2CE29CC-System.Exception.PrepForRemoting%28%29 – xhafan

+0

[Exception.PrepForRemoting()] 링크가 수정되었습니다. 소스 코드] (http://dotnetframework.org/default.aspx/[email protected]@1/[email protected]@1/[email protected]@1/DEVDIV/depot/DevDiv/releases/whidbey/NetFXspW7/ndp/clr/ src/BCL/System/Exception @ cs/1/Exception @ cs) – xhafan

관련 문제