다음을 통해 공유


UWP 앱 배포 및 디버깅

이 문서에서는 다양한 배포 및 디버깅 대상을 대상으로 하는 단계를 안내합니다.

Microsoft Visual Studio를 사용하면 다양한 Windows 10 디바이스에서 UWP(유니버설 Windows 플랫폼) 앱을 배포하고 디버그할 수 있습니다. Visual Studio는 대상 디바이스에서 앱을 빌드하고 등록하는 프로세스를 처리합니다.

배포 대상 선택

대상을 선택하려면 디버깅 시작 단추 옆에 있는 디버그 대상 드롭다운으로 이동하여 앱을 배포할 대상을 선택합니다. 대상이 선택되면, 디버깅 시작 (F5)을 선택하여 해당 대상에 배포하고 디버그하거나, Ctrl+F5를 선택하여 해당 대상에 배포합니다.

디버그 디바이스 대상 목록

  • 시뮬레이터 는 현재 개발 컴퓨터의 시뮬레이션된 환경에 앱을 배포합니다. 이 옵션은 앱의 대상 플랫폼 최소 버전인 경우에만 사용할 수 있습니다. 버전 개발 컴퓨터의 운영 체제보다 작거나 같습니다.
  • 로컬 컴퓨터 는 현재 개발 머신에 앱을 배포합니다. 이 옵션은 앱의 대상 플랫폼 최소 버전인 경우에만 사용할 수 있습니다. 버전 개발 컴퓨터의 운영 체제보다 작거나 같습니다.
  • 원격 머신 을 사용하면 앱을 배포할 원격 대상을 지정할 수 있습니다. 원격 머신에 배포하는 방법에 대한 자세한 내용은 원격 디바이스 지정에서 찾을 수 있습니다.
  • 디바이스 는 USB 연결 디바이스에 앱을 배포합니다. 디바이스는 개발자 모드로 잠금 해제되어 있고 화면 잠금이 해제되어 있어야 합니다.
  • 에뮬레이터 대상은 이름에 지정된 구성을 사용하여 앱을 부팅하고 에뮬레이터에 배포합니다. 에뮬레이터는 Windows 8.1 이상을 실행하는 Hyper-V 사용 가능한 컴퓨터에서만 사용할 수 있습니다.

배포된 앱 디버깅

Visual Studio는 실행 중인 UWP 앱 프로세스에 연결하기 위해 디버그를 선택한 다음 프로세스에 연결을 선택할 수도 있습니다. 실행 중인 프로세스에 연결하려면 원래 Visual Studio 프로젝트가 필요하지 않지만 원래 코드가 없는 프로세스를 디버깅할 때 프로세스의 기호 를 로드하면 크게 도움이 됩니다.

또한 디버그, 기타를 선택한 다음 설치된 앱 패키지 디버그를 선택하여 설치된 앱 패키지를 연결하고 디버그할 수 있습니다.

설치된 앱 패키지 디버그 대화 상자

시작하지 않고 프로그램이 실행될 때 코드를 디버그하면, 사용자 지정 시간에 실행할 때 Visual Studio 디버거가 UWP 앱에 연결됩니다. 이는 사용자 지정 매개 변수를 사용한 프로토콜 활성화와 같은 다양한 시작 메서드에서 제어 경로를 디버그하는 효과적인 방법입니다.

UWP 앱은 Windows 8.1 이상에서 개발 및 컴파일할 수 있지만 Windows 10을 실행하려면 필요합니다. Windows 8.1 PC에서 UWP 앱을 개발하는 경우 호스트와 대상 컴퓨터가 모두 동일한 LAN에 있는 경우 다른 Windows 10 디바이스에서 실행되는 UWP 앱을 원격으로 디버그할 수 있습니다. 이렇게 하려면 두 컴퓨터 모두에 Visual Studio용 원격 도구를 다운로드하여 설치합니다. 설치된 버전은 설치한 기존 버전의 Visual Studio와 일치해야 하며 선택한 아키텍처(x86, x64)도 대상 앱의 아키텍처와 일치해야 합니다.

패키지 레이아웃

Visual Studio 2015 업데이트 3을 기준으로 개발자가 UWP 앱의 레이아웃 경로를 지정할 수 있는 옵션이 추가되었습니다. 이렇게 하면 앱을 빌드할 때 패키지 레이아웃이 디스크에 복사되는 위치가 결정됩니다. 기본적으로 이 속성은 프로젝트의 루트 디렉터리를 기준으로 설정됩니다. 이 속성을 수정하지 않으면 이전 버전의 Visual Studio에서와 동일하게 동작이 유지됩니다.

이 속성은 프로젝트의 디버그 속성에서 수정할 수 있습니다.

앱에 대한 패키지를 만들 때 패키지에 모든 레이아웃 파일을 포함하려면 프로젝트 속성을 <IncludeLayoutFilesInPackage>true</IncludeLayoutFilesInPackage>추가해야 합니다.

이 속성을 추가하려면 다음을 수행합니다.

  1. 프로젝트를 마우스 오른쪽 버튼으로 클릭한 다음, 프로젝트 언로드을 선택합니다.
  2. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고, [projectname].xxproj 편집을 선택합니다( .xxproj는 프로젝트 언어에 따라 변경됨).
  3. 속성을 추가한 다음 프로젝트를 다시 로드합니다.

원격 디바이스 지정

C# 및 Microsoft Visual Basic

C# 또는 Microsoft Visual Basic 앱에 대한 원격 머신을 지정하려면 디버그 대상 드롭다운에서 원격 머신 을 선택합니다. IP 주소를 지정하거나 검색된 디바이스를 선택할 수 있는 원격 연결 대화 상자가 나타납니다. 기본적으로 유니버설 인증 모드가 선택됩니다. 사용할 인증 모드를 확인하려면 인증 모드를 참조하세요.

원격 연결 대화 상자

이 대화 상자로 돌아가려면 프로젝트 속성을 열고 디버그 탭으로 이동합니다. 그런 다음, 원격 컴퓨터: 옆의 찾기를 선택합니다.

디버그 탭

사전 작성자 업데이트 원격 PC에 앱을 배포하려면 대상 PC에 Visual Studio 원격 도구를 다운로드하여 설치해야 합니다. 전체 지침은 원격 PC 지침을 참조하세요. 그러나 크리에이터스 업데이트 PC는 원격 배포도 지원합니다.

C++ 및 JavaScript

C++ 또는 JavaScript UWP 앱에 대한 원격 컴퓨터 대상을 지정하려면 다음을 수행합니다.

  1. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 버튼으로 클릭한 다음, 속성을 클릭합니다.
  2. 디버깅 설정으로 이동하고 디버거에서시작하려면 원격 컴퓨터선택합니다.
  3. 컴퓨터 이름을 입력하거나 찾기를 클릭하여 찾은 다음 인증 유형 속성을 설정합니다.

디버그 속성 페이지

컴퓨터를 지정한 후 디버그 대상 드롭다운에서 원격 머신 을 선택하여 지정된 컴퓨터로 돌아갈 수 있습니다. 한 번에 하나의 원격 컴퓨터만 선택할 수 있습니다.

원격 PC 지침

비고

이러한 지침은 이전 버전의 Windows 10에만 필요합니다. 크리에이터스 업데이트를 기준으로 PC는 Xbox처럼 취급될 수 있습니다. 즉, PC의 개발자 모드 메뉴에서 "Device Discovery"(디바이스 검색)를 사용하도록 설정하고 범용 인증을 사용하여 PIN 페어링을 통해 PC와 연결합니다.

사전 작성자 업데이트 원격 PC에 배포하려면 대상 PC에 Visual Studio 원격 도구가 설치되어 있어야 합니다. 또한 원격 PC는 대상 플랫폼 최소 버전 앱보다 크거나 같은 Windows 버전을 실행해야 합니다. 버전 속성입니다. 원격 도구를 설치한 후에는 대상 PC에서 원격 디버거를 시작해야 합니다.

이렇게 하려면 시작 메뉴에서 원격 디버거를 검색하고, 열고, 메시지가 표시되면 디버거가 방화벽 설정을 구성하도록 허용합니다. 기본적으로 디버거는 Windows 인증을 사용하여 시작됩니다. 로그인한 사용자가 두 PC에서 동일하지 않은 경우 사용자 자격 증명이 필요합니다.

인증 없음으로 변경하려면 원격 디버거에서 도구 -옵션으로 이동한 다음, 인증 없음으로 설정하세요. 원격 디버거를 설정한 후에는 호스트 디바이스를 개발자 모드으로 설정해야 합니다. 그런 다음 개발 머신에서 배포할 수 있습니다.

자세한 내용은 Visual Studio 다운로드 센터 페이지를 참조하세요.

명령줄 디버그 인수 전달

Visual Studio 2019에서는 UWP 애플리케이션 디버깅을 시작할 때 명령줄 디버그 인수를 전달할 수 있습니다. Application 클래스의 OnLaunched 메서드에서 args 매개변수로부터 명령줄 디버그 인수에 액세스할 수 있습니다. 명령줄 디버그 인수를 지정하려면 프로젝트의 속성을 열고 디버그 탭으로 이동합니다.

비고

C#, VB 및 C++용 Visual Studio 2017(버전 15.1)에서 사용할 수 있습니다. JavaScript는 이후 버전에서 사용할 수 있습니다. 명령줄 디버그 인수는 시뮬레이터를 제외한 모든 배포 유형에 사용할 수 있습니다.

C# 및 VB UWP 프로젝트의 경우 시작 옵션아래에 명령줄 인수: 필드가 표시됩니다.

명령줄 인수

C++ 및 JS UWP 프로젝트의 경우 명령줄 인수 항목이 디버깅 속성에 표시됩니다.

디버깅 옵션이 선택된 앱 4 속성 페이지의 스크린샷이며, 테이블에 명령줄 인수 속성이 표시된 구성 속성 >

명령줄 인수를 지정하면 앱의 OnLaunched 메서드에서 인수 값에 액세스할 수 있습니다. LaunchActivatedEventArgs 개체 인수 값이 명령줄 인수 필드의 텍스트로 설정된 인수 속성이 있습니다.

C++ 및 JS에 대한 명령줄 인수의 스크린샷

인증 모드

원격 머신 배포를 위한 세 가지 인증 모드가 있습니다.

  • 유니버설(암호화되지 않은 프로토콜): 원격 디바이스에 배포할 때마다 이 인증 모드를 사용합니다. 현재 Windows 버전 1703(크리에이터스 업데이트) 이상의 PC뿐만 아니라 IoT 디바이스, Xbox 장치 및 HoloLens 디바이스를 위한 것입니다. 유니버설(암호화되지 않은 프로토콜)은 신뢰할 수 있는 네트워크에서만 사용해야 합니다. 디버깅 연결은 개발 및 원격 머신 간에 전달되는 데이터를 가로채고 변경할 수 있는 악의적인 사용자에게 취약합니다.
  • Windows: 이 인증 모드는 Visual Studio 원격 도구를 실행하는 원격 PC(데스크톱 또는 랩톱)에만 사용됩니다. 대상 컴퓨터의 로그인한 사용자의 자격 증명에 액세스할 수 있는 경우 이 인증 모드를 사용합니다. 원격 배포를 위한 가장 안전한 채널입니다.
  • 없음: 이 인증 모드는 Visual Studio 원격 도구를 실행하는 원격 PC(데스크톱 또는 랩톱)에만 사용됩니다. 테스트 계정이 로그인되어 있고 자격 증명을 입력할 수 없는 환경에서 테스트 머신을 설정한 경우 이 인증 모드를 사용합니다. 원격 디버거 설정이 인증을 허용하지 않도록 설정되어 있는지 확인합니다.

고급 원격 배포 옵션

Visual Studio 2015 업데이트 3 및 Windows 10 1주년 업데이트 릴리스를 기준으로 특정 Windows 10 디바이스에 대한 새로운 고급 원격 배포 옵션이 있습니다. 고급 원격 배포 옵션은 프로젝트 속성에 대한 디버그 메뉴에서 찾을 수 있습니다.

새 속성은 다음과 같습니다.

  • 배포 유형
  • 패키지 등록 경로
  • 더 이상 레이아웃의 일부가 아니더라도 모든 파일을 디바이스에 유지

요구 사항

고급 원격 배포 옵션을 활용하려면 다음 요구 사항을 충족해야 합니다.

  • Windows 10 Tools 1.4.1 이상(Windows 10 1주년 업데이트 SDK 포함)을 사용하여 Visual Studio 2015 업데이트 3 이상 Visual Studio 릴리스를 설치하도록 하려면 최신 버전의 Visual Studio를 업데이트와 함께 사용하여 모든 최신 개발 및 보안 기능을 얻는 것이 좋습니다.
  • Windows 10 1주년 업데이트 Xbox 원격 장치 또는 Windows 10 크리에이터 업데이트 PC를 목표로 설정하십시오.
  • 유니버설 인증 모드 사용

속성 페이지

C# 또는 Visual Basic UWP 앱의 경우 속성 페이지는 다음과 같습니다.

CS 또는 VB 속성

C++ UWP 앱의 경우 속성 페이지는 다음과 같습니다.

Cpp 속성

디바이스에 파일 복사

디바이스에 파일 복사 는 네트워크를 통해 원격 디바이스로 파일을 물리적으로 전송합니다. 레이아웃 폴더 경로에 빌드된 패키지 레이아웃을 복사하고 등록합니다. Visual Studio는 디바이스에 복사된 파일을 Visual Studio 프로젝트의 파일과 동기화된 상태로 유지합니다. 그러나 레이아웃더 이상 포함되지 않은 파일도 디바이스에 모든 파일을 유지하는 옵션이 있습니다. 이 옵션을 선택하면 이전에 원격 디바이스에 복사되었지만 프로젝트의 일부가 아닌 모든 파일이 원격 디바이스에 유지됩니다.

패키지 등록 경로는 파일을 디바이스에 복사할 때 지정되는 파일이 복사되는 원격 디바이스의 물리적 위치입니다. 이 경로는 상대 경로로 지정할 수 있습니다. 파일이 배포되는 위치는 대상 디바이스에 따라 달라지는 개발 파일 루트를 기준으로 합니다. 이 경로를 지정하면 여러 개발자가 동일한 디바이스를 공유하고 일부 빌드 분산이 있는 패키지에서 작업하는 데 유용합니다.

비고

장치에 파일 복사 는 현재 Windows 10 1주년 업데이트를 실행하는 Xbox 및 Windows 10 크리에이터스 업데이트를 실행하는 PC에서 지원됩니다.

원격 디바이스에서 레이아웃은 다음 기본 위치로 복사됩니다. \\MY-DEVKIT\DevelopmentFiles\PACKAGE-REGISTRATION-PATH

네트워크에서 레이아웃 등록

네트워크에서 레이아웃을 등록하도록 선택하면 패키지 레이아웃을 네트워크 공유에 빌드한 다음 네트워크에서 직접 원격 디바이스에 레이아웃을 등록할 수 있습니다. 이렇게 하려면 원격 디바이스에서 액세스할 수 있는 레이아웃 폴더 경로(네트워크 공유)를 지정해야 합니다. 레이아웃 폴더 경로 속성은 Visual Studio를 실행하는 PC를 기준으로 설정된 경로 집합이지만 패키지 등록 경로 속성은 경로는 동일하지만 원격 디바이스를 기준으로 지정됩니다.

네트워크에서 레이아웃을 성공적으로 등록하려면 먼저 레이아웃 폴더 경로를 네트워크 공유 폴더로 해야 합니다. 이렇게 하려면 파일 탐색기에서 폴더를 마우스 오른쪽 단추 로 클릭하고 특정 사용자와 > 공유를 선택한 다음 폴더를 공유할 사용자를 선택합니다. 네트워크에서 레이아웃을 등록하려고 하면 공유에 액세스할 수 있는 사용자로 등록할 수 있도록 자격 증명을 묻는 메시지가 표시됩니다.

이에 대한 도움말은 다음 예제를 참조하세요.

  • 예제 1(로컬 레이아웃 폴더, 네트워크 공유로 액세스할 수 있음):

    • 레이아웃 폴더 경로 = D:\Layouts\App1
    • 패키지 등록 경로 = \\NETWORK-SHARE\Layouts\App1
  • 예제 2(네트워크 레이아웃 폴더):

    • 레이아웃 폴더 경로 = \\NETWORK-SHARE\Layouts\App1
    • 패키지 등록 경로 = \\NETWORK-SHARE\Layouts\App1

네트워크에서 레이아웃을 처음 등록하면 자격 증명이 대상 디바이스에 캐시되므로 반복적으로 로그인할 필요가 없습니다. 캐시된 자격 증명을 제거하려면 deletecreds 명령과 함께 Windows 10 SDK에서 WinAppDeployCmd.exe 도구를 사용할 수 있습니다.

원격 디바이스에 물리적으로 복사되는 파일이 없기 때문에 네트워크에서 레이아웃을 등록할 때는 장치의 모든 파일을 유지할 수 있는 옵션을 선택할 수 없습니다.

비고

네트워크의 레이아웃 등록은 현재 Windows 10 애니버서리 업데이트를 실행하는 Xbox와 Windows 10 크리에이터스 업데이트를 실행하는 PC에서 지원됩니다.

원격 디바이스에서 레이아웃은 디바이스 패밀리에 따라 다음과 같은 기본 위치에 등록됩니다. - PC가 symlink를 사용하지 않고 대신 패키지 등록 경로를 직접 등록할 패키지 등록 경로에 대한 symlink입니다

디버깅 옵션

Windows 10에서는 사전 실행이라는 기술로 앱을 사전에 시작한 다음 일시 중단하여 UWP 앱의 시작 성능이 향상됩니다. 대부분의 앱은 이 모드에서 작동하기 위해 특별한 작업을 수행할 필요가 없지만 일부 앱은 동작을 조정해야 할 수 있습니다. 이러한 코드 경로의 문제를 디버그하기 위해 사전 실행 모드에서 Visual Studio에서 앱 디버깅을 시작할 수 있습니다.

디버깅은 Visual Studio 프로젝트(디버그 ->기타 디버그 대상 ->유니버설 Windows 앱 사전 실행 디버그) 및 컴퓨터에 이미 설치된 앱(디버그 ->기타 디버그 대상 ->설치된 앱 패키지 디버그)에서도 지원됩니다. 이 경우, 사전 실행으로 앱 활성화 확인란을 선택합니다. 자세한 내용은 UWP 프리런치 디버그를 참조하세요.

시작 프로젝트의 디버그 속성 페이지에서 다음 배포 옵션을 설정할 수 있습니다.

  • 로컬 네트워크 루프백 허용

    보안상의 이유로 표준 방식으로 설치된 UWP 앱은 설치된 디바이스에 대한 네트워크 호출을 할 수 없습니다. 기본적으로 Visual Studio 배포는 배포된 앱에 대해 이 규칙에서 예외를 만듭니다. 이 예외를 사용하면 단일 컴퓨터에서 통신 절차를 테스트할 수 있습니다. Microsoft Store에 앱을 제출하기 전에 예외 없이 앱을 테스트해야 합니다.

    앱에서 네트워크 루프백 예외를 제거하려면 다음을 수행합니다.

    • C# 및 Visual Basic 디버그 속성 페이지에서 로컬 네트워크 루프백 허용 확인란의 선택을 취소합니다.
    • JavaScript 및 C++ 디버깅 속성 페이지에서 로컬 네트워크 루프백 허용 값을 아니요로 설정합니다.
  • 앱을 시작하지 않고 시작 시 내 코드를 디버그합니다 / 애플리케이션 시작

    앱이 시작될 때 디버깅 세션을 자동으로 시작하도록 배포를 구성하려면 다음을 수행합니다.

    • C# 및 Visual Basic 디버그 속성 페이지에서 시작하지 않고 시작 시 내 코드를 디버깅합니다 체크 박스를 선택합니다.
    • JavaScript 및 C++ 디버깅 속성 페이지에서 애플리케이션 시작 값을 로 설정합니다.

기호

기호 파일에는 변수, 함수 이름 및 진입점 주소와 같은 코드를 디버깅할 때 매우 유용한 다양한 데이터가 포함되어 있으므로 예외 및 호출 스택 실행 순서를 더 잘 이해할 수 있습니다. 대부분의 Windows 버전에서 사용되는 기호는 Microsoft Symbol Server 을 통해 사용할 수 있으며, Windows 기호 패키지 다운로드에서 다운로드하여 더 빠르고 오프라인으로 조회할 수 있습니다.

Visual Studio에 대한 기호 옵션을 설정하려면 도구 > 옵션을 선택하고, 대화 상자에서 디버깅 > 기호 로 이동합니다.

옵션 대화 상자

WinDbg를 사용하여 디버깅 세션에서 심볼을 로드하려면 sympath 변수를 심볼 패키지 위치로 설정합니다. 예를 들어 다음 명령을 실행하면 Microsoft 기호 서버에서 기호를 로드한 다음 C:\Symbols 디렉터리에 캐시합니다.

.sympath SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols
.reload

‘;’ 구분 기호를 사용하여 경로를 더 추가하거나 .sympath+ 명령을 사용할 수 있습니다. WinDbg를 사용하는 고급 기호 작업은 공용 및 프라이빗 기호를 참조하세요.

WinDbg

WinDbg는 Windows SDK에 포함된 Windows용 디버깅 도구 제품군의 일부로 제공되는 강력한 디버거입니다. Windows SDK 설치를 사용하면 Windows용 디버깅 도구를 독립 실행형 제품으로 설치할 수 있습니다. 네이티브 코드를 디버깅하는 데 매우 유용하지만 관리 코드 또는 HTML5로 작성된 앱에는 WinDbg를 사용하지 않는 것이 좋습니다.

UWP 앱에서 WinDbg를 사용하려면 먼저 PLM(프로세스 수명 관리)용 테스트 및 디버깅 도구에 설명된 대로 PLMDebug를 사용하여 앱 패키지 에 대해 PLM(프로세스 수명 관리)을 사용하지 않도록 설정해야 합니다.

plmdebug /enableDebug [PackageFullName] ""C:\Program Files\Debugging Tools for Windows (x64)\WinDbg.exe\" -server npipe:pipe=test"

Visual Studio와 달리 WinDbg의 핵심 기능 대부분은 명령 창에 명령을 제공하는 데 의존합니다. 제공된 명령을 사용하면 실행 상태를 보고, 사용자 모드 크래시 덤프를 조사하고, 다양한 모드로 디버그할 수 있습니다.

WinDbg에서 가장 인기 있는 명령 중 하나는 다음과 같이 현재 예외에 대한 자세한 정보를 검색하는 데 사용되는 !analyze -v.

  • FAULTING_IP: 오류 시 명령 포인터
  • EXCEPTION_RECORD: 현재 예외의 주소, 코드 및 플래그
  • STACK_TEXT: 예외 이전의 스택 추적

모든 WinDbg 명령의 전체 목록은 디버거 명령을 참조하세요.