Expression Blend 응용 프로그램 디버깅

Microsoft Expression Blend 응용 프로그램이 예상대로 작동하지 않거나 응용 프로그램을 테스트할 때 오류가 발생하면 응용 프로그램에 버그가 있는 것입니다. 버그의 원인이나 응용 프로그램에서 버그가 발생한 위치를 파악하기는 쉽지 않지만, 발생할 수 있는 버그 유형을 이해해 두면 버그 해결에 도움이 될 것입니다.

구문 오류

응용 프로그램을 빌드할 때 구문 오류가 발생하면 Expression Blend의 결과 패널에 있는 오류 탭이나 Microsoft Visual Studio 2008의 오류 목록 패널에 표시됩니다.

구문 오류는 XAML(Extensible Application Markup Language)이나 코드가 언어의 서식 설정 규칙을 준수하지 않는 경우에 발생합니다. 오류 설명을 보면 오류 해결 방법을 파악할 수 있습니다. 오류가 발생하는 파일의 이름 및 줄 번호도 함께 표시됩니다. 구문 오류의 몇 가지 일반적인 원인은 다음과 같습니다.

  • 키워드에 맞춤법 오류가 있거나 대문자 표시가 잘못되었습니다.

  • 텍스트 문자열 주위에 따옴표가 없습니다.

  • XAML 요소에 닫는 태그가 없습니다.

  • XAML 요소가 허용되지 않는 위치에 있습니다. Expression Blend의 디자인 보기나 Visual Studio 2008에서 문서를 편집하면 이러한 오류를 방지할 수 있습니다.

  • 코드 파일의 함수나 메서드 호출에 필수 매개 변수가 없습니다. 예를 들어 MessageBox.Show() 메서드에는 MessageBox.Show("Hello")에 있는 문자열것과 같은 매개 변수가 하나 이상 있어야 합니다.

  • 코드 파일에서 특정 형식의 변수가 다른 형식에 할당되었습니다. 예를 들어 MessageBox.Show() 메서드에 문자열 인수를 지정할 수 있지만 정수 인수는 지정할 수 없습니다.

  • C#에서 인수가 필요 없는 메서드의 끝에 괄호가 없습니다. 예를 들어 this.InitializeComponent;를 사용하면 구문 오류가 발생하는데, 올바른 줄은 this.InitializeComponent();이기 때문입니다.

XAML 구문에 대한 자세한 내용은 MSDN의 Windows Presentation Foundation 컨트롤 라이브러리Silverlight Control Gallery(Silverlight 컨트롤 갤러리)에 나와 있는 개별 컨트롤에 대한 개요 항목을 참조하십시오. 프로그래밍 구문에 대한 자세한 내용은 MSDN에서 원하는 코드의 키워드를 검색하여 참조할 수 있습니다.

컴파일 오류

응용 프로그램을 빌드할 때 컴파일 오류가 발생하면 Expression Blend의 결과 패널에 있는 오류 탭이나 Visual Studio 2008의 오류 목록 패널에 표시됩니다.

컴파일 오류는 Expression Blend나 Visual Studio 2008의 컴파일 시스템에서 프로젝트에 필요한 항목을 찾을 수 없는 경우에 발생합니다. 예를 들어 WPF(Windows Presentation Foundation) 프로젝트에 WPF 어셈블리에 대한 참조가 없는 경우 "이름 'Window'이(가) 네임스페이스 'https://schemas.microsoft.com/winfx/2006/xaml/presentation'에 없습니다."와 같은 오류가 표시될 수 있습니다. 이 오류가 표시되면 프로젝트 메뉴에서 참조 추가를 클릭하여 "C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5" 폴더에 있는 다음 WPF 어셈블리에 참조를 추가할 수 있습니다.

  • PresentationCore.dll

  • PresentationFramework.dll

  • WindowsBase.dll

"'<member>' 이름이 현재 컨텍스트에 없습니다."와 같은 오류가 계속 나타나면 다른 어셈블리 참조가 누락되었거나, 그렇지 않으면 누락된 네임스페이스에 대한 using(C#) 또는 Imports(Visual Basic .NET) 문을 코드에 추가해야 할 수 있습니다. 필요한 어셈블리나 네임스페이스를 찾으려면 오류 발생의 원인이 되는 멤버와 관련한 정보를 소개하는 MSDN 항목을 참조하십시오.

컴파일 오류의 몇 가지 일반적인 원인은 다음과 같습니다.

  • 키워드에 맞춤법 오류가 있거나 대문자 표시가 잘못되었습니다.

  • 응용 프로그램에서 클래스가 제대로 참조되지 않았습니다. 예를 들어 응용 프로그램에서 고유한 네임스페이스로 별도의 .cs 또는 .vb 코드 파일에 구현되는 사용자 지정 클래스를 사용하는 경우 해당 사용자 지정 클래스를 사용하는 응용 프로그램의 문서에는 다음 줄이 포함되어야 합니다. 여기서 FullyQualifiedNamespace는 코드 파일의 네임스페이스입니다.

    xmlns:SampleNamespace="clr-namespace:FullyQualifiedNamespace"
    
  • 컴파일러 옵션이 제대로 지정되지 않았거나 시스템에서 Microsoft .NET Framework 기반 응용 프로그램을 빌드할 수 없습니다. Microsoft .NET Framework 3.5 서비스 팩 1이 설치되어 있는 경우 Expression Blend 또는 Visual Studio 2008을 사용하여 응용 프로그램을 빌드하면 이는 문제가 되지 않습니다.

  • 프로젝트를 빌드하기 전에 파일을 저장하지 않았습니다. 예를 들어 Expression Blend의 이벤트 패널 Cc294906.6c67bb3b-e8a2-4a63-bad5-54d5c15b04dd(KO-KR,Expression.30).png을 사용하여 코드 숨김 파일에 새로운 이벤트 처리기 메서드를 생성하여 Visual Studio로 코드 숨김 파일을 연 경우 먼저 코드 숨김 파일을 저장하지 않고 Expression Blend에서 프로젝트를 빌드하려고 하면 프로젝트에 이벤트 처리기에 대한 정의가 없다는 오류가 발생합니다.

런타임 오류

응용 프로그램을 빌드했지만 Expression Blend에서 F5 키를 눌러 실행할 때 예기치 않은 방식으로 작동하면 런타임 오류가 있는 것입니다. 런타임 오류는 논리 오류와 관련되므로 식별하기가 가장 어렵습니다. 경우에 따라 내부적으로 발생하는 문제를 파악할 때까지 XAML이나 코드를 다양하게 변경해 보면 런타임 오류를 해결할 수 있습니다. 그러나 실제로는 응용 프로그램이 실행되는 동안 한 줄씩 단계별로 코드를 실행하여 내부적으로 발생하는 문제를 파악하는 것이 더 빠릅니다.

자세한 내용은 Visual Studio 2008에서 Expression Blend 응용 프로그램 디버깅을 참조하십시오.

런타임 오류의 몇 가지 일반적인 원인은 다음과 같습니다.

  • XAML 요소의 레이아웃이 잘못 지정되었거나 다른 요소를 넣는 데 잘못된 패널 요소가 사용되었습니다.

    레이아웃에 대해 알아보려면 개체 정렬을 참조하거나 MSDN의 WPF 섹션에서 레이아웃 시스템맞춤, 여백 및 안쪽 여백 개요를 참조하십시오.

    XAML 요소가 올바른 이벤트 처리기에 연결되지 않았습니다. 이 문제는 많은 이벤트 처리기 메서드를 만든 다음 XAML 요소에 잘못된 메서드를 할당한 경우에 발생할 수 있습니다. Expression Blend에 열려 있는 WPF 프로젝트에서 XAML 요소에 할당된 이벤트 처리기를 확인하려면 개체 및 타임라인 패널에서 요소를 선택한 다음 속성 패널에서 이벤트 단추를 클릭하십시오.

    자세한 내용은 이벤트에 응답하는 코드 작성을 참조하십시오.

  • Expression Blend에서 애니메이션 트리거가 제대로 설정되지 않았습니다. 예를 들어 응용 프로그램이 로드된 후 애니메이션 스토리보드를 중지하거나 일시 중지하려면 애니메이션 스토리보드가 트리거에서 시작되어야 합니다. 기본적으로 모든 애니메이션 스토리보드는 Window.Loaded 트리거에서 시작되지만 변경할 수 있습니다.

    자세한 내용은 개체에 애니메이션 적용을 참조하십시오. 애니메이션 트리거의 예는 간단한 애니메이션 만들기를 참조하십시오.

  • 코드 파일에서 변수가 아직 존재하지 않는 개체를 참조합니다. 예를 들어 코드 숨김 파일에서는 this.InitializeComponent() 줄 앞에서 XAML 개체를 참조하면 XamlParseException 오류가 발생합니다.

  • 코드 파일에서 응용 프로그램이 예기치 않은 코드 경로를 따라 진행됩니다. 이런 경우에는 Visual Studio 2008에서 응용 프로그램을 디버그할 때 코드를 단계별로 실행하는 방법이 가장 좋습니다.

    자세한 내용은 Visual Studio 2008에서 Expression Blend 응용 프로그램 디버깅을 참조하십시오.

  • 코드 숨김 파일에서, 별도의 스레드에서 수행되어야 하는 다른 프로그래밍 논리와 동일한 스레드에서 UI(사용자 인터페이스) 업데이트가 실행됩니다. 예를 들어 레이블에 표시되는 텍스트를 업데이트하고 몇 가지 추가 계산을 수행한 후 이벤트 처리기 메서드가 완료되기 전에 같은 레이블의 텍스트를 다시 업데이트하는 이벤트 처리기 메서드를 만들면 마지막 업데이트만 표시됩니다. 이는 이벤트 처리기 메서드가 끝날 때 UI 렌더링이 발생하고 모든 처리가 동일한 스레드에서 수행되어 UI를 업데이트하는 메서드가 실행되는 동안 응용 프로그램의 작업 시간이 초과되지 않기 때문입니다.

    여러 번의 UI 업데이트와 계산을 수행하는 WPF 응용 프로그램 작성 방법에 대한 자세한 내용은 MSDN의 WPF 섹션에서 스레딩 모델을 참조하십시오.

  • 코드 숨김 파일의 이벤트 처리기 메서드에서 UI 요소나 속성이 사용 가능한 상태가 되기 전에 참조되었습니다. 예를 들어 Window1() 생성자 메서드에서는 아직 UI 요소에 액세스할 수 없습니다. OnInitialized() 이벤트 처리기 메서드에서는 UI 요소에 액세스할 수 있지만 UI 요소의 레이아웃이 아직 지정되지 않았으므로 ActualWidth와 같은 속성을 검토할 수 없습니다. OnLoaded() 이벤트 처리기 메서드에서는 XAML 문서에 있는 UI 요소로 수행해야 할 작업을 수행할 수 있습니다.

    자세한 내용은 MSDN의 WPF 섹션에서 개체 수명 이벤트를 참조하십시오.

Visual Studio 2008에서 디버깅

Expression Blend는 WPF 기반 응용 프로그램 및 Microsoft Silverlight 응용 프로그램용의 풍부한 기능을 갖춘 사용자 인터페이스를 만들기 위한 디자인 도구입니다. Visual Studio 2008을 사용하여 Expression Blend 프로젝트를 열고 빌드하고 디버그할 수 있습니다. Expression Blend의 프로젝트 실행(F5 키) 기능을 사용하여 응용 프로그램을 디버그하는 데 문제가 있는 경우 Visual Studio 2008을 사용하여 런타임 오류에 대한 자세한 오류 메시지를 확인할 수 있습니다.

자세한 내용은 Visual Studio 2008에서 Expression Blend 응용 프로그램 디버깅을 참조하십시오.

성능 문제 디버깅

WPF에서는 응용 프로그램의 런타임 동작을 분석하여 성능을 향상시키는 방법을 확인할 수 있는 성능 평가 도구 제품군을 제공합니다.

자세한 내용은 MSDN의 WPF 섹션에서 WPF용 성능 프로파일링 도구WPF 응용 프로그램 성능 최적화를 참조하십시오.

이벤트 추적

경험이 많은 .NET 프로그래머는 WPF 응용 프로그램에 코드를 추가하여 보다 복잡한 버그를 디버그하는 데 도움이 되는 사용자 지정 디버깅 이벤트를 트리거할 수 있습니다. 이러한 기능을 ETW(Windows용 이벤트 추적)라고 합니다. WPF 이벤트 추적 프로파일링 도구는 ETW를 사용하여 이벤트를 로깅합니다.

자세한 내용은 MSDN의 WPF용 성능 프로파일링 도구에서 "이벤트 추적" 및 "PresentationTraceSources"를 참조하십시오.

통합 응용 프로그램 디버깅

WPF 및 Windows Forms 프로그래밍과 같은 다른 기술을 모두 사용하는 응용 프로그램이 있는 경우 예기치 않게 겹치는 동작, 크기 조정 동작, 컨트롤 포커스 문제 등의 문제가 발생할 수 있습니다.

혼합 응용 프로그램 디버깅에 대한 자세한 내용은 MSDN의 WPF 섹션에서 혼합 응용 프로그램 문제 해결을 참조하십시오.

보안

디버그할 때는 다른 사람이 응용 프로그램을 사용할 때와 같은 보안 권한이 사용자의 응용 프로그램에 적용됩니다.

자세한 내용은 Expression Blend 응용 프로그램 배포 및 게시를 참조하십시오.

WPF 응용 프로그램 보안에 대한 자세한 내용은 MSDN의 WPF 섹션에서 보안(WPF)을 참조하십시오.

도움말 보기

Expression Blend 응용 프로그램 디버깅에 대한 도움말을 보려면 Windows Presentation Foundation Forum(Windows Presentation Foundation Forum 포럼) 또는 Silverlight learning center(Silverlight 학습 센터)에서 문제와 관련된 게시물을 검색하거나 질문을 게시할 수 있습니다.