Men-debug tugas latar belakang

API penting

Pelajari cara men-debug tugas latar belakang, termasuk aktivasi tugas latar belakang dan penelusuran kesalahan di log peristiwa Windows.

Men-debug tugas latar belakang di luar proses vs. dalam proses

Topik ini terutama membahas tugas latar belakang yang berjalan dalam proses terpisah daripada aplikasi host. Jika Anda men-debug tugas latar belakang dalam proses, maka Anda tidak akan memiliki proyek tugas latar belakang terpisah dan dapat mengatur titik henti pada OnBackgroundActivated() (tempat kode latar belakang dalam proses Anda berjalan) dan lihat langkah 2 di Memicu tugas latar belakang secara manual untuk men-debug kode tugas latar belakang, di bawah ini, untuk instruksi tentang cara memicu kode latar belakang Anda untuk dijalankan.

Pastikan proyek tugas latar belakang disiapkan dengan benar

Topik ini mengasumsikan bahwa Anda sudah memiliki aplikasi yang sudah ada dengan tugas latar belakang untuk di-debug. Berikut ini khusus untuk tugas latar belakang yang berjalan di luar proses dan tidak berlaku untuk tugas latar belakang dalam proses.

  • Di C# dan C++, pastikan proyek utama mereferensikan proyek tugas latar belakang. Jika referensi ini tidak ada di tempat, tugas latar belakang tidak akan disertakan dalam paket aplikasi.
  • Di C# dan C++, pastikan jenis Output dari proyek tugas latar belakang adalah "Komponen Runtime Windows".
  • Kelas latar belakang harus dideklarasikan dalam atribut titik masuk dalam manifes paket.

Memicu tugas latar belakang secara manual untuk men-debug kode tugas latar belakang

Tugas latar belakang dapat dipicu secara manual melalui Microsoft Visual Studio. Kemudian Anda dapat menelusuri kode dan men-debugnya.

  1. Di C#, letakkan titik henti di metode Jalankan kelas latar belakang (untuk tugas latar belakang dalam proses, letakkan titik henti di App.OnBackgroundActivated()), dan/atau tulis output debugging dengan menggunakan System.Diagnostics.

    Di C++, letakkan titik henti di fungsi Jalankan kelas latar belakang (untuk tugas latar belakang dalam proses, letakkan titik henti di App.OnBackgroundActivated()), dan/atau tulis output debugging dengan menggunakan OutputDebugString.

  2. Jalankan aplikasi Anda di debugger lalu picu tugas latar belakang menggunakan toolbar Peristiwa Siklus Hidup . Menu drop-down ini memperlihatkan nama tugas latar belakang yang dapat diaktifkan oleh Visual Studio.

    Catatan

    Opsi toolbar Peristiwa Siklus Hidup tidak ditampilkan secara default di Visual Studio. Untuk menampilkan opsi ini, klik kanan toolbar saat ini di Visual Studio dan pastikan opsi Lokasi Debug diaktifkan.

    Agar ini berfungsi, tugas latar belakang harus sudah didaftarkan dan masih harus menunggu pemicunya. Misalnya, jika tugas latar belakang didaftarkan dengan TimeTrigger satu bidikan dan pemicu tersebut telah diaktifkan, meluncurkan tugas melalui Visual Studio tidak akan berpengaruh.

    Catatan

    Tugas latar belakang yang menggunakan pemicu berikut tidak dapat diaktifkan dengan cara ini: Pemicu aplikasi, pemicu MediaProcessing, ControlChannelTrigger, PushNotificationTrigger, dan tugas latar belakang menggunakan SystemTrigger dengan jenis pemicu SmsReceived .
    Pemicu aplikasi dan MediaProcessingTrigger dapat disinyalir secara manual dalam kode dengan trigger.RequestAsync().

    tugas latar belakang penelusuran kesalahan

  3. Ketika tugas latar belakang diaktifkan, debugger akan melampirkannya dan menampilkan output debug di VS.

Men-debug aktivasi tugas latar belakang

Catatan

Bagian ini khusus untuk tugas latar belakang yang dijalankan di luar proses dan tidak berlaku untuk tugas latar belakang dalam proses.

Aktivasi tugas latar belakang tergantung pada tiga hal:

  • Nama dan namespace dari kelas tugas latar belakang
  • Atribut titik masuk yang ditentukan dalam manifes paket
  • Titik entri yang ditentukan oleh aplikasi Anda saat mendaftarkan tugas latar belakang
  1. Gunakan Visual Studio untuk mencatat titik masuk tugas latar belakang:

    • Di C# dan C++, perhatikan nama dan namespace kelas tugas latar belakang yang ditentukan dalam proyek tugas latar belakang.
  2. Gunakan perancang manifes untuk memeriksa apakah tugas latar belakang dideklarasikan dengan benar dalam manifes paket:

    • Di C# dan C++, atribut titik masuk harus cocok dengan namespace layanan tugas latar belakang diikuti dengan nama kelas. Misalnya: RuntimeComponent1.MyBackgroundTask.
    • Semua jenis pemicu yang digunakan dengan tugas juga harus ditentukan.
    • Executable TIDAK BOLEH ditentukan kecuali Anda menggunakan ControlChannelTrigger atau PushNotificationTrigger.
  3. Hanya Windows. Untuk melihat titik entri yang digunakan oleh Windows untuk mengaktifkan tugas latar belakang, aktifkan pelacakan debug dan gunakan log peristiwa Windows.

    Jika Anda mengikuti prosedur ini dan log peristiwa menunjukkan titik masuk atau pemicu yang salah untuk tugas latar belakang, aplikasi Anda tidak mendaftarkan tugas latar belakang dengan benar. Untuk bantuan terkait tugas ini, lihat Mendaftarkan tugas latar belakang.

    1. Buka penampil peristiwa dengan masuk ke layar Mulai dan cari eventvwr.exe.
    2. Buka Log Aplikasi dan Layanan ->Microsoft -Windows ->>BackgroundTaskInfrastructure di penampil peristiwa.
    3. Di panel tindakan, pilih Tampilkan ->Tampilkan Log Analitik dan Debug untuk mengaktifkan pembuatan log diagnostik.
    4. Pilih log Diagnostik dan klik Aktifkan Log.
    5. Sekarang coba gunakan aplikasi Anda untuk mendaftar dan mengaktifkan tugas latar belakang lagi.
    6. Lihat log diagnostik untuk informasi kesalahan terperinci. Ini akan mencakup titik masuk yang terdaftar untuk tugas latar belakang.

penampil peristiwa untuk informasi debug tugas latar belakang

Tugas latar belakang dan penyebaran paket Visual Studio

Jika aplikasi yang menggunakan tugas latar belakang disebarkan menggunakan Visual Studio, dan versi (utama dan/atau minor) yang ditentukan dalam Designer Manifes kemudian diperbarui, kemudian menyebarkan ulang aplikasi dengan Visual Studio dapat menyebabkan tugas latar belakang aplikasi menjadi stall. Ini dapat diperbaiki sebagai berikut:

  • Gunakan Windows PowerShell untuk menyebarkan aplikasi yang diperbarui (bukan Visual Studio) dengan menjalankan skrip yang dihasilkan bersama paket.
  • Jika Anda sudah menyebarkan aplikasi menggunakan Visual Studio dan tugas latar belakangnya sekarang terhenti, reboot atau log keluar/masuk untuk membuat tugas latar belakang aplikasi berfungsi lagi.
  • Anda dapat memilih opsi debugging "Selalu instal ulang paket saya" untuk menghindari hal ini dalam proyek C#.
  • Tunggu hingga aplikasi siap untuk penyebaran akhir untuk menambah versi paket (jangan ubah saat penelusuran kesalahan).

Keterangan

  • Pastikan aplikasi Anda memeriksa pendaftaran tugas latar belakang yang ada sebelum mendaftarkan tugas latar belakang lagi. Beberapa pendaftaran dari tugas latar belakang yang sama dapat menyebabkan hasil yang tidak terduga dengan menjalankan tugas latar belakang lebih dari sekali setiap kali dipicu.
  • Jika tugas latar belakang memerlukan akses layar kunci, pastikan untuk meletakkan aplikasi di layar kunci sebelum mencoba men-debug tugas latar belakang. Untuk informasi tentang menentukan opsi manifes untuk mengunci aplikasi berkemampuan layar, lihat Mendeklarasikan tugas latar belakang dalam manifes aplikasi.
  • Parameter pendaftaran tugas latar belakang divalidasi pada saat pendaftaran. Kesalahan dikembalikan jika salah satu parameter pendaftaran tidak valid. Pastikan aplikasi Anda menangani skenario dengan lancar di mana pendaftaran tugas latar belakang gagal - jika sebaliknya aplikasi Anda bergantung pada memiliki objek pendaftaran yang valid setelah mencoba mendaftarkan tugas, itu mungkin crash.

Untuk informasi selengkapnya tentang menggunakan VS untuk men-debug tugas latar belakang, lihat Cara memicu peristiwa ditangguhkan, dilanjutkan, dan di latar belakang di aplikasi UWP.