Bagikan melalui


Men-debug aplikasi UWP menggunakan WinDbg

Anda dapat men-debug aplikasi Platform Windows Universal (UWP) menggunakan WinDbg. Pendekatan ini biasanya akan digunakan untuk skenario lanjutan, di mana tidak dimungkinkan untuk menyelesaikan tugas penelusuran kesalahan menggunakan debugger Visual Studio bawaan. Untuk informasi selengkapnya tentang penelusuran kesalahan di Visual Studio, lihat Penelusuran kesalahan di Visual Studio.

Melampirkan ke aplikasi UWP

Melampirkan ke proses UWP sama dengan melampirkan ke proses mode pengguna. Misalnya, di WinDbg Anda dapat melampirkan ke proses yang sedang berjalan dengan memilih Lampirkan ke Proses dari menu File atau dengan menekan F6. Untuk informasi selengkapnya, lihat Men-debug Proses Mode Pengguna Menggunakan WinDbg.

Aplikasi UWP tidak akan ditangguhkan dengan cara yang sama seperti saat tidak di-debug. Untuk secara eksplisit menangguhkan/melanjutkan aplikasi UWP, Anda dapat menggunakan perintah .suspendpackage dan .resumepackage (detail di bawah). Untuk informasi umum tentang Manajemen Siklus Hidup Proses (PLM) yang digunakan oleh aplikasi UWP, lihat Siklus hidup aplikasi dan Meluncurkan, memulai kembali, dan tugas latar belakang.

Meluncurkan dan men-debug aplikasi UWP

Parameter baris perintah -plmPackage dan -plmApp menginstruksikan debugger untuk meluncurkan aplikasi di bawah debugger.

windbg.exe -plmPackage <PLMPackageName> -plmApp <ApplicationId> [<parameters>]

Karena beberapa aplikasi dapat dimuat dalam satu paket, <parameter PLMPackage> dan <ApplicationId> diperlukan. Ini adalah ringkasan parameter.

Parameter Keterangan
<PLMPackageName> Nama paket aplikasi. Gunakan perintah .querypackages untuk mencantumkan semua aplikasi UWP. Jangan berikan jalur ke lokasi paket, berikan nama paket saja.
<ApplicationId>

ApplicationId terletak di file manifes aplikasi dan dapat dilihat menggunakan perintah .querypackage atau .querypackages seperti yang dibahas dalam topik ini.

Untuk informasi selengkapnya tentang file manifes aplikasi, lihat Manifes paket aplikasi.

[<parameter]>

Parameter opsional diteruskan ke Aplikasi. Tidak semua aplikasi menggunakan atau memerlukan parameter.

Sampel HelloWorld

Untuk menunjukkan penelusuran kesalahan UWP, topik ini menggunakan contoh HelloWorld yang dijelaskan dalam Membuat aplikasi "Halo, dunia" (XAML).

Untuk membuat aplikasi pengujian yang dapat dikerjakan, anda hanya perlu menyelesaikan hingga langkah ketiga lab.

Menemukan Nama Paket Lengkap dan AppId

Gunakan perintah .querypackages untuk menemukan nama paket lengkap dan AppId. Ketik .querypackages lalu pengguna CRTL+F untuk mencari di output untuk nama aplikasi, seperti HelloWorld. Ketika entri terletak menggunakan CTRL+F, entri akan menampilkan nama lengkap paket, misalnya e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8 dan AppId Aplikasi.

Contoh:

0:000>  .querypackages 
...
Package Full Name: e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8
Package Display Name: HelloWorld
Version: 1.0.0.0
Processor Architecture: x86
Publisher: CN=user1
Publisher Display Name: user1
Install Folder: c:\users\user1\documents\visual studio 2015\Projects\HelloWorld\HelloWorld\bin\x86\Release\AppX
Package State: Unknown
AppId: App
...

Menampilkan Nama Paket Dasar dalam Manifes

Untuk pemecahan masalah, Anda mungkin ingin melihat nama paket dasar di Visual Studio.

Untuk menemukan nama paket dasar di Visual Studio, klik file ApplicationManifest.xml di penjelajah proyek. Nama paket dasar akan ditampilkan di bawah tab kemasan sebagai "Nama paket". Secara default, nama paket akan menjadi GUID, misalnya e24caf14-8483-4743-b80c-ca46c28c75df.

Untuk menggunakan notepad untuk menemukan nama paket dasar, buka file ApplicationManifest.xml dan temukan tag Nama Identitas.

  <Identity
    Name="e24caf14-8483-4743-b80c-ca46c28c75df"
    Publisher="CN= User1"
    Version="1.0.0.0" />

Menemukan Id Aplikasi dalam Manifes

Untuk menemukan Id Aplikasi dalam file manifes untuk aplikasi UWP yang diinstal, cari entri Id Aplikasi.

Misalnya, untuk aplikasi halo dunia, ID Aplikasi adalah Aplikasi.

<Application Id="App"
      Executable="$targetnametoken$.exe"
      EntryPoint="HelloWorld.App">

Contoh Baris Perintah WinDbg

Ini adalah contoh baris perintah yang memuat aplikasi HelloWorld di bawah debugger menggunakan nama paket lengkap dan AppId.

windbg.exe -plmPackage e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8 -plmApp App

Meluncurkan tugas latar belakang di bawah debugger

Tugas latar belakang dapat secara eksplisit diluncurkan di bawah debugger dari baris perintah menggunakan TaskId. Untuk melakukan ini, gunakan parameter baris perintah -plmPackage dan -plmBgTaskId:

windbg.exe -plmPackage <PLMPackageName> -plmBgTaskId <BackgroundTaskId>
Parameter Keterangan
<PLMPackageName>

Nama paket aplikasi. Gunakan perintah .querypackages untuk mencantumkan semua aplikasi UWP. Jangan berikan jalur ke lokasi paket, berikan nama paket saja.

<BackgroundTaskId>

BackgroundTaskId dapat ditemukan menggunakan perintah .querypackages seperti yang dijelaskan di bawah ini.

Untuk informasi selengkapnya tentang file manifes aplikasi, lihat Manifes paket aplikasi.

Ini adalah contoh memuat kode SDKSamples.BackgroundTask di bawah debugger.

windbg.exe -plmPackage Microsoft.SDKSamples.BackgroundTask.CPP_1.0.0.0_x64__8wekyb3d8bbwe -plmBgTaskId {ee4438ee-22db-4cdd-85e4-8ad8a1063523}

Anda dapat bereksperimen dengan kode sampel tugas Latar Belakang agar terbiasa dengan penelusuran kesalahan UWP. Ini dapat diunduh di sampel tugas Latar Belakang.

Gunakan perintah .querypackages untuk menemukan BackgroundTaskId. Gunakan CTRL-F untuk menemukan aplikasi lalu temukan bidang Id Tugas Latar Belakang. Tugas latar belakang harus berjalan untuk menampilkan nama tugas latar belakang dan ID tugas terkait.

0:000> .querypackages
...
Package Full Name: Microsoft.SDKSamples.BackgroundTask.CPP_1.0.0.0_x86__8wekyb3d8bbwe
Package Display Name: BackgroundTask C++ sample
Version: 1.0.0.0
Processor Architecture: x86
Publisher: CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
Publisher Display Name: Microsoft Corporation
Install Folder: C:\Users\user1\Documents\Visual Studio 2015\Projects\Background_task_sample\C++\Debug\BackgroundTask.Windows\AppX
Package State: Running
AppId: BackgroundTask.App
Background Task Name: SampleBackgroundTask
Background Task Id: {ee4438ee-22db-4cdd-85e4-8ad8a1063523}
...

Jika Anda mengetahui nama paket lengkap, Anda dapat menggunakan .querypackage untuk menampilkan bidang Id Tugas Latar Belakang.

Anda juga dapat menemukan BackgroundTaskId dengan menggunakan opsi enumerateBgTasks dari PLMDebug. Untuk informasi selengkapnya tentang utilitas PMLDebug, lihat PLMDebug.

C:\Program Files\Debugging Tools for Windows (x64)>PLMDebug /enumerateBgTasks Microsoft.SDKSamples.BackgroundTask.CPP_1.0.0.0_x64__8wekyb3d8bbwe
Package full name is Microsoft.SDKSamples.BackgroundTask.CPP_1.0.0.0_x64__8wekyb3d8bbwe.
Background Tasks:
SampleBackgroundTask : {C05806B1-9647-4765-9A0F-97182CEA5AAD}

SUCCEEDED

Men-debug proses UWP dari jarak jauh menggunakan Server Proses (DbgSrv)

Semua perintah -plm* berfungsi dengan benar dengan dbgsrv. Untuk men-debug menggunakan dbgsrv, gunakan sakelar -premote dengan string koneksi untuk dbgsrv:

windbg.exe -premote npipe:pipe=fdsa,server=localhost -plmPackage e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8 -plmApp App

Untuk informasi selengkapnya tentang opsi -premote, lihat Server Proses (Mode Pengguna) dan Contoh Server Proses.

Ringkasan perintah aplikasi UWP

Bagian ini menyediakan ringkasan perintah debugger aplikasi UWP

Mengumpulkan Informasi Paket

.querypackage

.querypackage menampilkan status aplikasi UWP. Misalnya, jika aplikasi berjalan, aplikasi dapat berada dalam status Aktif .

.querypackage <PLMPackageName>

Contoh:

0:000> .querypackage e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8
Package Full Name: e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8
Package Display Name: HelloWorld
Version: 1.0.0.0
Processor Architecture: x86
Publisher: CN=user1
Publisher Display Name: user1
Install Folder: c:\users\user1\documents\visual studio 2015\Projects\HelloWorld\HelloWorld\bin\x86\Release\AppX
Package State: Running
AppId: App
Executable: HelloWorld.exe

.querypackages

Perintah .querypackages mencantumkan semua aplikasi UWP yang diinstal dan statusnya saat ini.

.querypackages

Contoh:

0:000> .querypackages
...
Package Full Name: Microsoft.MicrosoftSolitaireCollection_3.9.5250.0_x64__8wekyb3d8bbwe
Package Display Name: Microsoft Solitaire Collection
Version: 3.9.5250.0
Processor Architecture: x64
Publisher: CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
Publisher Display Name: Microsoft Studios
Install Folder: C:\Program Files\WindowsApps\Microsoft.MicrosoftSolitaireCollection_3.9.5250.0_x64__8wekyb3d8bbwe
Package State: Unknown
AppId: App

Package Full Name: e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8
Package Display Name: HelloWorld
Version: 1.0.0.0
Processor Architecture: x86
Publisher: CN=user1
Publisher Display Name: user1
Install Folder: c:\users\user1\documents\visual studio 2015\Projects\HelloWorld\HelloWorld\bin\x86\Release\AppX
Package State: Running
AppId: App
Executable: HelloWorld.exe

Package Full Name: Microsoft.SDKSamples.BackgroundTask.CPP_1.0.0.0_x86__8wekyb3d8bbwe
Package Display Name: BackgroundTask C++ sample
Version: 1.0.0.0
Processor Architecture: x86
Publisher: CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
Publisher Display Name: Microsoft Corporation
Install Folder: C:\Users\user1\Documents\Visual Studio 2015\Projects\Background_task_sample\C++\Debug\BackgroundTask.Windows\AppX
Package State: Unknown
AppId: BackgroundTask.App

...

Meluncurkan aplikasi untuk Penelusuran Kesalahan

.createpackageapp

Perintah .createpackageapp memungkinkan penelusuran kesalahan dan meluncurkan aplikasi UWP.

.createpackageapp <PLMPackageName> <ApplicationId> [<parameters>] 

Tabel ini mencantumkan parameter untuk .createpackageapp.

Parameter Keterangan
<PLMPackageName> Nama paket aplikasi. Gunakan perintah .querypackages untuk mencantumkan semua aplikasi UWP. Jangan berikan jalur ke lokasi paket, berikan nama paket saja.
<ApplicationId>

ApplicationId dapat ditemukan menggunakan .querypackage atau .querypackages seperti yang dibahas sebelumnya dalam topik ini.

Untuk informasi selengkapnya tentang file manifes aplikasi, lihat Manifes paket aplikasi.

[<parameter]> Parameter opsional yang diteruskan ke aplikasi. Tidak semua aplikasi memerlukan atau menggunakan parameter opsional ini.

Contoh:

.createpackageapp e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8 App

Mengaktifkan dan Menonaktifkan Penggunaan Perintah Debug

.enablepackagedebug

Perintah .enablepackagedebug memungkinkan penelusuran kesalahan untuk aplikasi UWP. Anda harus menggunakan .enablepackagedebug sebelum memanggil salah satu fungsi yang ditangguhkan, dilanjutkan, atau dihentikan.

Perhatikan bahwa perintah .createpackageapp juga memungkinkan penelusuran kesalahan aplikasi.

.enablepackagedebug <PLMPackageName>

Contoh:

.enablepackagedebug e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8

.disablepackagedebug

Perintah .disablepackagedebug menonaktifkan penelusuran kesalahan untuk aplikasi UWP.

.disablepackagedebug <PLMPackageName>

Contoh:

.disablepackagedebug e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8

Memulai dan Menghentikan aplikasi

Perhatikan bahwa menangguhkan, melanjutkan, dan menghentikan memengaruhi semua aplikasi yang sedang berjalan dalam paket.

.suspendpackage

Perintah .suspendpackage, menangguhkan aplikasi UWP.

.suspendpackage <PLMPackageName> 

Contoh:

0:024> .suspendpackage e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8

.resumepackage

Perintah .resumepackage melanjutkan aplikasi UWP.

.resumepackage <PLMPackageName> 

Contoh:

.resumepackage e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8

.terminatepackageapp

Perintah .terminatepackageapp mengakhiri semua aplikasi UWP dalam paket.

.terminatepackageapp <PLMPackageName> 

Contoh:

.terminatepackageapp e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8

Tugas Latar Belakang

.activatepackagebgtask

Perintah .activatepackagebgtask memungkinkan penelusuran kesalahan dan meluncurkan tugas latar belakang UWP.

 .activatepackagebgtask <PLMPackageName> <bgTaskId>

Contoh:

.activatepackagebgtask Microsoft.SDKSamples.BackgroundTask.CPP_1.0.0.0_x64__8wekyb3d8bbwe {C05806B1-9647-4765-9A0F-97182CEA5AAD}

Contoh Penggunaan

Lampirkan debugger saat aplikasi Anda diluncurkan

Misalkan Anda memiliki aplikasi bernama HelloWorld yang ada dalam paket bernama e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8. Verifikasi bahwa paket Anda diinstal dengan menampilkan nama lengkap dan menjalankan status semua paket yang terinstal. Di jendela Prompt Perintah, masukkan perintah berikut. Anda dapat menggunakan CTRL+F untuk mencari output perintah untuk nama aplikasi HelloWorld.

.querypackages 
...

Package Full Name: e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8
Package Display Name: HelloWorld
Version: 1.0.0.0
Processor Architecture: x86
Publisher: CN=user1
Publisher Display Name: user1
Install Folder: c:\users\user1\documents\visual studio 2015\Projects\HelloWorld\HelloWorld\bin\x86\Release\AppX
Package State: Unknown
AppId: App

...

Gunakan .createpackageapp untuk meluncurkan dan melampirkan ke aplikasi. Perintah .createpackageapp juga memungkinkan penelusuran kesalahan aplikasi.

.createpackageapp e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8 App

Setelah Anda selesai men-debug, dekremen jumlah referensi debug untuk paket menggunakan perintah .disablepackagedebug.

.disablepackagedebug e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8

Melampirkan debugger ke aplikasi yang sudah berjalan

Misalkan Anda ingin melampirkan WinDbg ke MyApp, yang sudah berjalan. Di WinDbg, pada menu File , pilih Lampirkan ke Proses. Perhatikan ID proses untuk MyApp. Katakanlah ID prosesnya adalah 4816. Menaikkan jumlah referensi debug untuk paket yang berisi MyApp.

.enablepackagedebug e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8

Di WinDbg, dalam kotak dialog Lampirkan ke Proses , pilih proses 4816, dan klik OK. WinDbg akan dilampirkan ke MyApp.

Setelah Anda selesai men-debug, dekremen jumlah referensi debug untuk paket menggunakan perintah .disablepackagedebug.

.disablepackagedebug e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8

Menangguhkan dan melanjutkan aplikasi Anda secara manual

Ikuti langkah-langkah ini untuk menangguhkan dan melanjutkan aplikasi Anda secara manual. Pertama, tambahkan jumlah referensi debug untuk paket yang berisi aplikasi Anda.

.enablepackagedebug  e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8

Menangguhkan paket. Handler yang ditangguhkan aplikasi Anda disebut, yang dapat membantu untuk penelusuran kesalahan.

.suspendpackage e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8

Setelah Anda selesai menelusuri kesalahan, lanjutkan paket.

.resumepackage e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8

Terakhir, dekremen jumlah referensi debug untuk paket.

.disablepackagedebug e24caf14-8483-4743-b80c-ca46c28c75df_1.0.0.0_x86__97ghe447vaan8

Lihat juga