重要な API
バックグラウンド タスクのアクティブ化や Windows イベント ログのデバッグ トレースなど、バックグラウンド タスクをデバッグする方法について説明します。
プロセス外タスクとインプロセス バックグラウンド タスクのデバッグ
このトピックでは主に、ホスト アプリとは別のプロセスで実行されるバックグラウンド タスクについて説明します。 インプロセス バックグラウンド タスクをデバッグする場合は、別のバックグラウンド タスク プロジェクトが存在せず、 OnBackgroundActivated() ( インプロセス バックグラウンド コードが実行される場所) にブレークポイントを設定できます。バックグラウンド コードを実行するトリガー方法については、以下のバックグラウンド タスク コードをデバッグするためにバックグラウンド タスクを手動でトリガーする手順 2 を参照してください。
バックグラウンド タスク プロジェクトが正しく設定されていることを確認する
このトピックでは、デバッグするバックグラウンド タスクを持つ既存のアプリが既にあることを前提としています。 以下は、アウトプロセスで実行されるバックグラウンド タスクに固有であり、インプロセスバックグラウンド タスクには適用されません。
- C# と C++ で、メイン プロジェクトがバックグラウンド タスク プロジェクトを参照していることを確認します。 この参照が設定されていない場合、バックグラウンド タスクはアプリ パッケージに含まれません。
- C# と C++ で、バックグラウンド タスク プロジェクトの 出力の種類 が "Windows ランタイム コンポーネント" であることを確認します。
- バックグラウンド クラスは、パッケージ マニフェストのエントリ ポイント属性で宣言する必要があります。
バックグラウンド タスクを手動でトリガーしてバックグラウンド タスク コードをデバッグする
バックグラウンド タスクは、Microsoft Visual Studio を使用して手動でトリガーできます。 その後、コードをステップ実行してデバッグできます。
C# では、バックグラウンド クラスの Run メソッドにブレークポイントを配置するか、またはインプロセス バックグラウンド タスクの場合は App.OnBackgroundActivated() にブレークポイントを配置します。さらに、System.Diagnosticsを使用してデバッグ出力
を記録します。 C++ では、バックグラウンド クラスの Run 関数にブレークポイントを配置し (インプロセス バックグラウンド タスクの場合は App.OnBackgroundActivated())、OutputDebugStringを使用してデバッグ出力
書き込みます。 デバッガーでアプリケーションを実行し、[ ライフサイクル イベント ] ツール バーを使用してバックグラウンド タスクをトリガーします。 このドロップダウンには、Visual Studio でアクティブ化できるバックグラウンド タスクの名前が表示されます。
注
Visual Studio では、[ライフサイクル イベント] ツール バーのオプションは既定では表示されません。 これらのオプションを表示するには、Visual Studio の現在のツール バーを右クリックし、[ デバッグの場所] オプションが有効になっていることを確認します。
これを機能させるには、バックグラウンド タスクが既に登録されていて、トリガーを待機している必要があります。 たとえば、バックグラウンド タスクが 1 回限りの TimeTrigger に登録されていて、そのトリガーが既に発生している場合、Visual Studio を使用してタスクを起動しても効果はありません。
注
バックグラウンド タスクは、以下のトリガーを使用する場合、この方法ではアクティブ化できません: アプリケーショントリガー、
、メディア処理トリガー、 、ControlChannelTrigger、 、PushNotificationTrigger、 、 、およびSystemTrigger トリガーの種類。SmsReceived
アプリケーション トリガー と MediaProcessingTrigger は、trigger.RequestAsync()
を使用してコード内で手動で通知できます。バックグラウンド タスクがアクティブになると、デバッガーはそのタスクにアタッチされ、VS にデバッグ出力が表示されます。
バックグラウンド タスクのアクティブ化をデバッグする
注
このセクションは、アウトプロセスのバックグラウンド タスクに固有であり、インプロセスバックグラウンド タスクには適用されません。
バックグラウンド タスクのアクティブ化は、次の 3 つに依存します。
- バックグラウンド タスク クラスの名前と名前空間
- パッケージ マニフェストで指定されたエントリ ポイント属性
- バックグラウンド タスクの登録時にアプリで指定されたエントリ ポイント
Visual Studio を使用して、バックグラウンド タスクのエントリ ポイントをメモします。
- C# と C++ では、バックグラウンド タスク プロジェクトで指定されたバックグラウンド タスク クラスの名前と名前空間をメモします。
マニフェスト デザイナーを使用して、バックグラウンド タスクがパッケージ マニフェストで正しく宣言されていることを確認します。
- C# と C++ では、エントリ ポイント属性は、バックグラウンド タスクの名前空間の後にクラス名が続く必要があります。 例: RuntimeComponent1.MyBackgroundTask。
- タスクで使用されるすべてのトリガーの種類も指定する必要があります。
- ControlChannelTrigger または PushNotificationTriggerを使用している場合を除き、実行可能ファイルは指定してはいけません。
Windows のみ。 バックグラウンド タスクをアクティブ化するために Windows によって使用されるエントリ ポイントを表示するには、デバッグ トレースを有効にして、Windows イベント ログを使用します。
この手順に従い、イベント ログにバックグラウンド タスクの間違ったエントリ ポイントまたはトリガーが表示された場合、アプリはバックグラウンド タスクを正しく登録していません。 このタスクのヘルプについては、「 バックグラウンド タスクの登録」を参照してください。
- スタート画面に移動し、eventvwr.exeを検索して、イベント ビューアーを開きます。
- イベント ビューアーで アプリケーション とサービス ログ ->Microsoft ->Windows ->BackgroundTaskInfrastructure に移動します。
- 操作ウィンドウで、[表示] ->[分析ログとデバッグログの表示] を選択して、診断ログを有効にします。
- 診断ログ を選択し、[ログを有効にする]をクリックします。
- 次に、アプリを使用してバックグラウンド タスクを登録し、再度アクティブ化してみてください。
- 詳細なエラー情報については、診断ログを参照してください。 これには、バックグラウンド タスクに登録されているエントリ ポイントが含まれます。
イベント ビューアー
バックグラウンド タスクと Visual Studio パッケージのデプロイ
バックグラウンド タスクを使用するアプリが Visual Studio を使用して展開され、マニフェスト デザイナーで指定されたバージョン (メジャーまたはマイナー) が更新された場合、その後 Visual Studio でアプリを再デプロイすると、アプリのバックグラウンド タスクが停止する可能性があります。 これは、次のように修正できます。
- パッケージと共に生成されたスクリプトを実行して、Windows PowerShell を使用して (Visual Studio ではなく) 更新されたアプリをデプロイします。
- Visual Studio を使用してアプリを既にデプロイしていて、そのバックグラウンド タスクがストールしている場合は、再起動またはログオフ/ログインして、アプリのバックグラウンド タスクを再び動作させます。
- C# プロジェクトでこれを回避するには、[パッケージを常に再インストールする] デバッグ オプションを選択できます。
- アプリが最終的なデプロイの準備が整ってパッケージバージョンをインクリメントするまで待ちます (デバッグ中は変更しないでください)。
注釈
- バックグラウンド タスクをもう一度登録する前に、アプリで既存のバックグラウンド タスクの登録を確認してください。 同じバックグラウンド タスクを複数回登録すると、バックグラウンド タスクがトリガーされるたびに複数回実行され、予期しない結果が発生する可能性があります。
- バックグラウンド タスクでロック画面へのアクセスが必要な場合は、バックグラウンド タスクをデバッグする前に、アプリをロック画面に配置してください。 ロック画面対応アプリのマニフェスト オプションの指定については、「 アプリケーション マニフェストでバックグラウンド タスクを宣言する」を参照してください。
- バックグラウンド タスク登録パラメーターは、登録時に検証されます。 登録パラメーターのいずれかが無効な場合は、エラーが返されます。 バックグラウンド タスクの登録が失敗するシナリオをアプリが適切に処理していることを確認します。代わりに、アプリがタスクの登録を試みた後に有効な登録オブジェクトを持つことに依存している場合は、クラッシュする可能性があります。
VS を使用してバックグラウンド タスクをデバッグする方法の詳細については、「 UWP アプリで中断、再開、およびバックグラウンド イベントをトリガーする方法」を参照してください。
関連トピック
- プロセス外のバックグラウンド タスクを作成して登録
- インプロセスのバックグラウンドタスクを作成して登録する
- バックグラウンド タスク を登録する
- アプリケーション マニフェスト でバックグラウンド タスクを宣言する
- バックグラウンドタスクのガイドライン
- UWP アプリで中断、再開、およびバックグラウンド イベントをトリガーする方法
- Visual Studio での .NET のコード分析の概要