この記事では、さまざまな展開とデバッグのターゲットを対象とする手順について説明します。
Microsoft Visual Studio を使用すると、さまざまな Windows 10 デバイスにユニバーサル Windows プラットフォーム (UWP) アプリを展開してデバッグできます。 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 アプリをリモートでデバッグできます。 これを行うには、両方のマシンに Remote Tools for Visual Studio をダウンロードしてインストールします。 インストールされているバージョンは、インストールした Visual Studio の既存のバージョンと一致している必要があり、選択したアーキテクチャ (x86、x64) もターゲット アプリのアーキテクチャと一致している必要があります。
パッケージのレイアウト
Visual Studio 2015 Update 3 の時点で、開発者が UWP アプリのレイアウト パスを指定するためのオプションが追加されました。 これにより、アプリのビルド時にディスク上のパッケージ レイアウトがコピーされる場所が決まります。 既定では、このプロパティはプロジェクトのルート ディレクトリに対して相対的に設定されます。 このプロパティを変更しない場合、動作は以前のバージョンの Visual Studio の動作と同じままです。
このプロパティは、プロジェクトの デバッグ プロパティで変更できます。
アプリのパッケージを作成するときに、すべてのレイアウト ファイルをパッケージに含める場合は、プロジェクト プロパティを <IncludeLayoutFilesInPackage>true</IncludeLayoutFilesInPackage>
追加する必要があります。
このプロパティを追加するには:
- プロジェクトを右クリックし、[プロジェクトのアンロード]を選択します。
- プロジェクトを右クリックし、[ projectname].xxproj の編集 を選択します (.xxproj はプロジェクトの言語に応じて変更されます)。
- プロパティを追加し、プロジェクトを再読み込みします。
リモート デバイスの指定
C# と Microsoft Visual Basic
C# または Microsoft Visual Basic アプリのリモート コンピューターを指定するには、デバッグ ターゲットのドロップダウンで [リモート コンピューター ] を選択します。 [リモート接続] ダイアログが表示され、IP アドレスを指定したり、検出されたデバイスを選択したりすることができます。 既定では、 ユニバーサル 認証モードが選択されています。 使用する認証モードを決定するには、「 認証モード」を参照してください。
このダイアログに戻るには、プロジェクトのプロパティを開き、[ デバッグ ] タブに移動します。そこから、[リモート マシン] の横にある [検索 ] を選択 します。
Creators Update のリモート PC にアプリを展開するには、ターゲット PC に Visual Studio リモート ツールをダウンロードしてインストールする必要もあります。 完全な手順については、 リモート PC の手順を参照してください。 ただし、Creators Update PC ではリモート展開もサポートされています。
C++ と JavaScript
C++ または JavaScript UWP アプリのリモート コンピューター ターゲットを指定するには:
- ソリューション エクスプローラーで、プロジェクトを右クリックし、[プロパティ] をクリックします。
デバッグ 設定に移動し、デバッガーで を起動するには、[リモート マシン選択します。 - マシン名 を入力するか、[検索] をクリックしてそれを探し、それから 認証タイプ プロパティを設定します。
マシンを指定した後、デバッグ ターゲットドロップダウンで リモート マシン を選択して、指定したマシンに戻ることができます。 一度に選択できるリモート コンピューターは 1 つだけです。
リモート PC の手順
注
これらの手順は、以前のバージョンの Windows 10 でのみ必要です。 クリエーターズ アップデートの時点では、PC は Xbox のように扱うことができます。 つまり、PC の [開発者モード] メニューでデバイス検出を有効にし、ユニバーサル認証を使用して PC とペアリングして接続します。
Creators Update より前のリモート PC に展開するには、ターゲット PC に Visual Studio リモート ツールがインストールされている必要があります。 リモート PC は、アプリのターゲット プラットフォームの最小バージョン プロパティ 以上のバージョンの Windows を実行している必要があります。 リモート ツールをインストールしたら、ターゲット PC でリモート デバッガーを起動する必要があります。
これを行うには、[スタート] メニューでリモート デバッガーを検索して開き、メッセージが表示されたら、デバッガーにファイアウォール設定の構成を許可します。 既定では、デバッガーは Windows 認証で起動します。 サインインしているユーザーが両方の PC で同じでない場合は、ユーザーの資格情報が必要になります。
認証なしに変更するには、リモート デバッガーで [ツール] ->Options に移動し、[認証なし] に設定します。 リモート デバッガーが設定されたら、ホスト デバイスを 開発者モードに設定していることを確認する必要もあります。 その後、開発用コンピューターからデプロイできます。
詳細については、 Visual Studio ダウンロード センター のページを参照してください。
コマンド ラインデバッグ引数の受け渡し
Visual Studio 2019 では、UWP アプリケーションのデバッグを開始するときに、コマンド ラインデバッグ引数を渡すことができます。 コマンド ライン デバッグ引数には、Application クラスの OnLaunched メソッドの args パラメーターからアクセスできます。 コマンド ラインデバッグ引数を指定するには、プロジェクトのプロパティを開き、[ デバッグ ] タブに移動します。
注
これは、Visual Studio 2017 (バージョン 15.1) で C#、VB、C++ で使用できます。 JavaScript は、以降のバージョンで使用できます。 コマンド ライン デバッグ引数は、シミュレーターを除くすべての展開の種類で使用できます。
C# および VB UWP プロジェクトの場合、開始オプションの下に コマンドライン引数: フィールドが表示されます。
C++ および JS UWP プロジェクトの場合、[デバッグ プロパティ] のフィールドとしてコマンド ライン引数が表示されます。
コマンド ライン引数を指定すると、App の OnLaunched メソッドの引数の値にアクセスできます。 引数
認証モード
リモート コンピューターの展開には、次の 3 つの認証モードがあります。
- ユニバーサル (暗号化されていないプロトコル):リモート デバイスに展開するときは常に、この認証モードを使用します。 現在、これは、IoT デバイス、Xbox デバイス、HoloLens デバイス、および Windows バージョン 1703 (Creators Update) 以降の PC 用です。 ユニバーサル (暗号化されていないプロトコル) は、信頼されたネットワークでのみ使用する必要があります。 デバッグ接続は、開発マシンとリモート コンピューターの間で渡されるデータを傍受して変更する可能性がある悪意のあるユーザーに対して脆弱です。
- Windows: この認証モードは、Visual Studio リモート ツールを実行しているリモート PC (デスクトップまたはノート PC) でのみ使用することを目的としています。 この認証モードは、ターゲット コンピューターのサインインユーザーの資格情報にアクセスできる場合に使用します。 これは、リモート展開の最も安全なチャネルです。
- なし: この認証モードは、Visual Studio リモート ツールを実行しているリモート PC (デスクトップまたはノート PC) でのみ使用することを目的としています。 この認証モードは、テスト アカウントがサインインしている環境でテスト マシンが設定されていて、資格情報を入力できない場合に使用します。 リモート デバッガーの設定が認証を受け入れないように設定されていることを確認します。
リモート展開の詳細オプション
Visual Studio 2015 Update 3 および Windows 10 Anniversary Update のリリース時点では、特定の Windows 10 デバイス用の新しい高度なリモート展開オプションがあります。 リモート配置の詳細オプションは、プロジェクトのプロパティの [デバッグ ] メニューにあります。
新しいプロパティは次のとおりです。
- 展開の種類
- パッケージ登録パス
- デバイス上のすべてのファイル (レイアウトの一部ではなくなったファイルも含む) を保持する
要求事項
高度なリモート展開オプションを利用するには、次の要件を満たす必要があります。
- Visual Studio 2015 Update 3 以降の Visual Studio リリースを Windows 10 Tools 1.4.1 以降 (Windows 10 Anniversary Update SDK を含む) と共にインストールします。最新バージョンの Visual Studio と更新プログラムを使用して、最新の開発機能とセキュリティ機能をすべて確実に入手することをお勧めします。
- Windows 10 Anniversary Update Xbox リモート デバイスまたは Windows 10 Creators Update PC を対象とする
- ユニバーサル認証モードを使用する
プロパティ ページ
C# または Visual Basic UWP アプリの場合、プロパティ ページは次のようになります。
CS プロパティまたは VB プロパティ を
C++ UWP アプリの場合、プロパティ ページは次のようになります。
Cpp プロパティの
デバイスにファイルをコピーする
デバイスにファイルをコピー すると、ネットワーク経由でリモート デバイスにファイルが物理的に転送されます。 レイアウト フォルダー パスにビルドされたパッケージ レイアウトをコピーして登録します。 Visual Studio は、デバイスにコピーされたファイルを Visual Studio プロジェクト内のファイルと同期して保持します。ただし、 レイアウトの一部ではなくなったファイルでも、デバイス上のすべてのファイルを保持するオプションがあります。 このオプションを選択すると、以前にリモート デバイスにコピーされたが、プロジェクトの一部ではなくなったファイルは、リモート デバイスに残ります。
ファイルをデバイス にコピーする時に指定される パッケージの登録パス は、ファイルがコピーされるリモートデバイス上の物理的な場所です。 このパスは、任意の相対パスとして指定できます。 ファイルが展開される場所は、ターゲット デバイスによって異なる開発ファイル ルートに対する相対位置になります。 このパスを指定すると、複数の開発者が同じデバイスを共有し、ビルドの差異があるパッケージに取り組む場合に役立ちます。
注
デバイスへのファイルのコピーは、現在、Windows 10 Anniversary Update を実行している Xbox および Windows 10 Creators Update を実行している PC でサポートされています。
リモート デバイスでは、レイアウトは次の既定の場所にコピーされます。 \\MY-DEVKIT\DevelopmentFiles\PACKAGE-REGISTRATION-PATH
ネットワークからレイアウトを登録する
ネットワークからレイアウトを登録する場合は、パッケージ レイアウトをネットワーク共有に作成し、ネットワークから直接リモート デバイスにレイアウトを登録できます。 そのためには、リモート デバイスからアクセスできるレイアウト フォルダー パス (ネットワーク共有) を指定する必要があります。 Layout フォルダー パス プロパティは、Visual Studio を実行している PC に対して相対的に設定されるパスですが、パッケージ登録パス プロパティは同じパスですが、リモート デバイスに対して相対的に指定されます。
ネットワークからレイアウトを正常に登録するには、まず Layout フォルダー パス を共有ネットワーク フォルダーにする必要があります。 これを行うには、エクスプローラーでフォルダーを右クリックし、[特定のユーザー>共有] を選択し、フォルダーを共有するユーザーを選択します。 ネットワークからレイアウトを登録しようとすると、共有へのアクセス権を持つユーザーとして登録していることを確認する資格情報の入力を求められます。
これに関するヘルプについては、次の例を参照してください。
例 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 Anniversary Update を実行している Xbox と Windows 10 Creators Update を実行している PC でサポートされています。
リモートデバイスでは、レイアウトがデバイスファミリに応じて次の既定の場所に登録されます:
デバッグ オプション
Windows 10 では、 事前起動と呼ばれる手法でアプリを事前に起動してから中断することで、UWP アプリの起動パフォーマンスが向上します。 多くのアプリでは、このモードで動作するために特別な操作を行う必要はありませんが、一部のアプリでは動作を調整する必要があります。 これらのコード パスの問題をデバッグするために、事前起動モードで Visual Studio からアプリのデバッグを開始できます。
デバッグは、Visual Studio プロジェクト (Debug ->Other Debug Targets ->Debug Universal Windows App Prelaunch) と、マシンに既にインストールされているアプリ (デバッグ ->その他のデバッグ ターゲット ->[事前起動でアプリをアクティブ化する] チェック ボックスをオンにしてインストールされたアプリ パッケージをデバッグする) の両方からサポートされます。 詳細については、「 UWP の事前起動のデバッグ」を参照してください。
スタートアップ プロジェクトの [デバッグ ] プロパティ ページで、次の配置オプションを設定できます。
ローカル ネットワーク ループバックを許可する
セキュリティ上の理由から、標準の方法でインストールされている UWP アプリは、インストールされているデバイスに対してネットワーク呼び出しを行うことができません。 既定では、Visual Studio のデプロイでは、デプロイされたアプリに対してこの規則の除外が作成されます。 この除外により、1 台のコンピューターで通信手順をテストできます。 アプリを Microsoft Store に提出する前に、除外なしでアプリをテストする必要があります。
アプリからネットワーク ループバックの除外を削除するには:
- [C# と Visual Basic デバッグ ] プロパティ ページで、[ ローカル ネットワーク ループバックを許可する ] チェック ボックスをオフにします。
- JavaScript と C++ のデバッグ プロパティ ページで、[ ローカル ネットワーク ループバックを許可する ] の値を [いいえ] に設定します。
起動せず、起動時にコードをデバッグする/アプリケーションを起動する
アプリの起動時にデバッグ セッションを自動的に開始するようにデプロイを構成するには:
- C# および Visual Basic デバッグ プロパティ ページで、[起動しないが、起動時にコード デバッグする] チェック ボックスをオンにします。
- JavaScript および C++ デバッグ プロパティ ページで、[ アプリケーションの起動 ] の値を [はい] に設定します。
シンボル
シンボル ファイルには、変数、関数名、エントリ ポイント アドレスなど、コードをデバッグするときに非常に役立つさまざまなデータが含まれており、例外と呼び出し履歴の実行順序をより深く理解できます。 Windows のほとんどのバリエーションのシンボルは、
Visual Studio のシンボル オプションを設定するには、[ ツール] > [オプション] を選択し、ダイアログ ウィンドウの [デバッグ > シンボル ] に移動します。
WinDbg を使用してデバッグ セッションでシンボルを読み込むには、シンボル パッケージの場所に sympath 変数を設定します。 たとえば、次のコマンドを実行すると、Microsoft Symbol Server からシンボルが読み込まれるので、C:\Symbols ディレクトリにキャッシュされます。
.sympath SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols
.reload
‘;’
区切り記号を使用してパスを追加することも、.sympath+
コマンドを使用することもできます。 WinDbg を使用するより高度なシンボル操作については、「 パブリック シンボルとプライベート シンボル」を参照してください。
WinDbg
WinDbg は、Windows SDK に含まれている Windows スイートのデバッグ ツールの一部として提供される強力なデバッガーです。 Windows SDK のインストールでは、スタンドアロン製品として Debugging Tools for 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 で最も一般的なコマンドの 1 つは !analyze -v
であり、現在の例外に関する詳細な情報を取得するために使用されます。
- FAULTING_IP: 障害発生時の命令ポインタ
- EXCEPTION_RECORD: 現在の例外のアドレス、コード、フラグ
- STACK_TEXT: 例外前のスタック トレース
すべての WinDbg コマンドの完全な一覧については、「 デバッガー コマンド」を参照してください。