Microsoft MVP성태의 닷넷 이야기
오류 유형: 59. WPF - XAML 로딩 시 Visual Studio 비정상 종료 [링크 복사], [링크+제목 복사],
조회: 27444
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 2개 있습니다.)

WPF - XAML 로딩 시 Visual Studio 비정상 종료


예전 Visual C++의 대화창 디자인 폼과 비교해 보면, 요즘의 WinForm/WPF 디자이너는 대단한 발전을 한 셈이죠. Visual C++이야 뭐, 리소스 파일에 있는 대화창 관련 텍스트 내용을 읽어서 화면에 표시하고 다시 그 정보를 리소스 파일에 텍스트로 써 넣는 역할만을 담당했었지만. WinForm/WPF는 "코드" 자체를 실행시켜서 디자인 화면에 뿌려주고 있기 때문에 실행 시와 유사한 디자인 화면을 제공해 주고 있습니다.

그런데.

꼭 이것이 좋은 것만은 아닙니다. "코드"를 실행한 결과를 디자이너에 반영하기 때문에 실제 런타임 시의 화면을 최대한 잘 반영할 수 있는 반면, 그 반대로 코드 내부에 "(논리) 버그"가 있는 경우, 원인 모를 현상에 시달릴 수도 있기 때문입니다.

최근 제가 경험했던 것을 예로 들면.

Visual Studio 2008에서, XAML 페이지를 로딩만 하면 그 즉시 VS 2008이 종료되어 버렸습니다. 흔하디 흔한 예외 상자도 뛰우지 않고, 단지 이벤트 로그에 아래와 같은 내용만을 뿌릴 뿐이었습니다.

.NET Runtime version 2.0.50727.3053 - Fatal Execution Engine Error (6AD90F92) (0)

Faulting application devenv.exe, version 9.0.30729.1, 
time stamp 0x488f2b50, faulting module kernel32.dll, version 6.0.6001.18000, 
time stamp 0x4791a76d, exception code 0xe053534f, 
fault offset 0x000442eb, process id 0xab4, application start time 0x01c92cce5378d099.

Watson 버킷 정보가 친절하게도 풀이되어서 나오고 있긴 한데. 그것뿐, 더 이상 추적할 만한 단서가 없었습니다. 예외 코드 "0xe053534f"의 오류 정보가 매우 애매합니다. 웹 검색을 해보면, "Software unknown exception"이라는 것이 전부이고, "SSCLI20"에 공개된 .NET Framework 소스 코드에 달랑 상수로 정의된 것이 전부입니다.

#define EXCEPTION_SOFTSO  0xe053534f    
    // 0xe0000000 | 'SSO'
    // We can not throw internal C++ exception through managed frame.
    // At boundary, we will raise an exception with this error code

도저히 모르겠습니다. ^^;

어쨌든, 범위를 좁힐 수 있는 것이라고는 디자이너가 "코드"를 사용한다는 것뿐이 없기 때문에 XAML 파일의 구조를 열심히 뜯어보기 시작했습니다.

과연, 심각한 문제가 있긴 했습니다.

xaml의 데이터 바인딩에 사용되는 StaticResource의 특정 이름을 풀이해 주기 위해서 집어 넣었던 것이 위의 예외를 발생시킨 원인이었습니다.

간단하게 코드를 보면,

===== 문제의 XAML 페이지에 대한 cs 코드 파일 ====
public  partial class UserControlBase : UserControl
{         
    public UserControlBase()
    {
        if (DesignerProperties.GetIsInDesignMode(this))
        {
            this.Resources.Add("MyComboBox", new TestApp.MyComboBox());
        }
    }
}

===== TestApp.MyComboBox의 정의 ====
public MyComboBox : UserControlBase
{
    ... [생략]...
}

대강 아시겠죠? ^^

WPF 디자이너가 XAML 페이지를 로드하고 있는데, UserControlBase라는 생성자를 실행하면서 다시 MyComboBox를 생성하고 있습니다. 문제는 MyComboBox가 다시 UserControlBase를 상속 받고 있다는 것.

그로 인해 무한 객체 생성이 시작되어, 위의 XAML 페이지를 디자이너로 불러들이면 잠시 동안의 CPU 100% 현상을 거쳐서 Visual Studio가 비정상 종료해버리는 원인을 가져온 것입니다. 이것으로 문제 파악 끝!

끝으로 한마디!
만약, 여러분들의 WPF 디자이너가 어느 순간부터 비정상 종료를 시작했다면... 코드를 한번 살펴 보시기 바랍니다. ^^



[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 4/10/2022]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2008-10-18 10시10분
kevin25

... 166  167  168  169  [170]  171  172  173  174  175  176  177  178  179  180  ...
NoWriterDateCnt.TitleFile(s)
758정성태8/15/200923546VS.NET IDE: 65. WPF 프로젝트용 Visual Studio 패치들 [2]
757정성태8/12/200922956오류 유형: 84. TFS 작업 항목 보기 오류 - WorkItemTypeDeniedOrNotExistException
756정성태8/9/200922531오류 유형: 83. A revocation check could not be performed for the certificate.
755정성태8/6/200920275.NET Framework: 154. 이벤트 2중 구독
754정성태7/16/200932601VS.NET IDE: 64. Visual Studio 2010 - 64bit 혼합 모드 디버깅 지원
753정성태7/15/200931122.NET Framework: 153. WPF와 WinForm의 Shown 이벤트 시점
752정성태7/14/200926686개발 환경 구성: 46. .NET Service Bus 응용 사례: SocketShifter [2]파일 다운로드1
751정성태7/9/200928025.NET Framework: 152. 순환 참조와 XmlSerializer파일 다운로드1
750정성태7/7/200927752.NET Framework: 151. Team Explorer가 설치되지 않은 PC에서 System.InvalidProgramException 예외 발생파일 다운로드1
748정성태7/2/200925720.NET Framework: 150. WPF - Property Element 사용 의미파일 다운로드2
747정성태7/1/200945382.NET Framework: 149. WPF - UI 업데이트를 바로 반영하고 싶다면? [3]파일 다운로드1
746정성태6/25/200932492.NET Framework: 148. WPF - 데이터 바인딩 시의 예외 처리 방법 [1]파일 다운로드1
745정성태6/22/200924493.NET Framework: 147. WPF - Binding에 Sibling 요소 지정 [2]파일 다운로드1
744정성태6/21/200923330.NET Framework: 146. WPF - 중첩된 ScrollViewer의 크기 제어 [2]파일 다운로드1
743정성태6/17/200927406.NET Framework: 145. Unity Container 개체 풀이
742정성태6/17/200926918.NET Framework: 144. WPF - FrameworkElement.Parent 속성이 null이라면? [3]
740정성태6/12/200924533.NET Framework: 143. WPF - Transform의 역변환파일 다운로드1
739정성태6/8/200937272.NET Framework: 142. WPF - Grid 컨트롤의 ShowGridLine 개선 [5]파일 다운로드1
737정성태6/6/200942739.NET Framework: 141. Win32 Interop - 크기가 정해지지 않은 배열을 C++에서 C#으로 전달하는 경우파일 다운로드2
734정성태6/4/200926194.NET Framework: 140. WPF - CellPadding 속성을 구현하는 Grid Layout [2]파일 다운로드1
733정성태5/29/200931597.NET Framework: 139. WPF - "M/d/yyyy h:mm:ss tt" 형식으로만 날짜를 출력하는 문제
732정성태5/27/200926610Team Foundation Server: 32. 팀 빌드 오류 확인 방법
731정성태5/27/200921581Team Foundation Server: 31. 팀 빌드 스케줄 확인 방법
730정성태5/26/200927126VS.NET IDE: 63. Visual Studio 2010 - Parallel Stacks [1]
729정성태5/25/200926831.NET Framework: 138. InternalsVisibleTo와 Public Key 값
728정성태5/23/200937366.NET Framework: 137. C#에서 Union 구조체 다루기파일 다운로드1
... 166  167  168  169  [170]  171  172  173  174  175  176  177  178  179  180  ...