Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Topik ini berisi tutorial video yang menunjukkan cara men-debug driver Windows Driver Frameworks (WDF) Anda dengan akses penuh ke kode sumber WDF. Setelah video adalah prosedur langkah demi langkah seperti yang ditunjukkan dalam video, untuk kemudahan referensi.
Debugging sumber WDF memungkinkan Anda memasuki kode framework secara bebas tanpa perlu mengunduh kode sumber WDF. Debugger secara otomatis mengunduh versi WDF yang benar dari GitHub.
Misalnya, jika Anda menggunakan WinDbg untuk men-debug driver WDF Anda pada komputer Windows 10, dan debugger rusak dengan kode kerangka kerja di tumpukan panggilan, Anda dapat mengklik dua kali pada bingkai WDF dalam tampilan Call Stack, dan WinDbg secara otomatis mengunduh dan membuka file sumber WDF yang relevan di baris yang cocok. Anda kemudian dapat menelusuri kode dan mengatur titik henti.
Fitur ini tersedia untuk sistem target yang menjalankan rilis publik Windows 10, atau versi Technical Preview build 10041 ke atas. Build ini memiliki file simbol terindeks sumber privat untuk KMDF (Wdf01000.sys) dan UMDF (Wudfx02000.dll) yang tersedia di Server Simbol Publik Microsoft. Debugging tingkat sumber WDF hanya tersedia di WinDbg, dan bukan di debugger Visual Studio.
Mulai Cepat
Mulai sesi debug kernel WinDbg ke komputer target, masuk, dan ikuti langkah-langkah berikut:
Atur jalur simbol default menggunakan .symfix. Ini mengatur jalur simbol untuk menunjuk ke server simbol di https://msdl.microsoft.com/download/symbols.
kd> .symfixAtur jalur sumber default menggunakan .srcfix. Ini mengatur jalur sumber ke srv*, yang memberi tahu debugger untuk mengambil file sumber dari lokasi yang ditentukan dalam file simbol modul target.
kd> .srcfix Source search path is: SRV*Muat ulang simbol menggunakan .reload, dan konfirmasikan bahwa simbol Wdf01000.sys (atau Wudfx02000.dll untuk UMDF) diindeks sumber. Seperti yang ditunjukkan pada output !lmi di bawah ini, PDB Wdf01000.sys diindeks sumber. Jika milik Anda tidak, lihat bagian Pengaturan WinDbg di bawah ini.
kd> .reload ... kd> !lmi wdf01000.sys Loaded Module Info: [wdf01000.sys] ... Load Report: private symbols & lines, source indexed C:\...\Wdf01000.pdb\...\Wdf01000.pdbSekarang Anda sudah siap! Cara mudah untuk menelusuri kode sumber WDF adalah dengan mengatur titik henti pada rutinitas pengiriman IRP kerangka kerja, lalu menelusuri sisa kode. Karena sistem Windows memiliki banyak driver KMDF bawaan, WDF selalu dimuat dan berjalan, karena itu, titik henti ini akan segera dijalankan (tanpa perlu memuat driver Anda sendiri).
kd> bp Wdf01000!FxDevice::DispatchWithLock kd> g Breakpoint 0 hit Wdf01000!FxDevice::DispatchWithLock: 87131670 8bff mov edi,edi
Jika ini tidak berhasil, lihat langkah-langkah Penyiapan WinDbg di bawah ini.
Penyetelan WinDbg
Jika contoh di atas tidak berfungsi seperti yang diharapkan, Anda mungkin perlu melakukan satu atau beberapa instruksi di bawah ini.
Aktifkan Mode Debug Sumber
Pastikan penelusuran kesalahan dalam Mode Sumber diaktifkan. Buka menu Debug dan konfirmasikan bahwa Mode Sumber dicentang.
Hapus Singgahan Simbol Kedaluarsa
Jika sebelumnya Anda men-debug driver WDF untuk target Windows yang sama, maka Anda mungkin menggunakan simbol WDF yang di-cache secara lokal yang tidak diindeks sumber. Anda dapat memeriksanya dengan perintah !lmi:
kd> !lmi Wdf01000.sys
Loaded Module Info: [wdf01000.sys]
...
Load Report: private symbols & lines, not source indexed
C:\...\Wdf01000.pdb\...\Wdf01000.pdb
Menurut Laporan Beban di atas, Wdf01000.pdb tidak diindeks sumber. Ini berarti cache simbol WinDbg lokal Anda basi. Untuk memperbaiki ini, bongkar PDB dari WinDbg, hapus cache lokal (jalur Anda mungkin berbeda berdasarkan output !lmi di atas), dan muat ulang PDB:
kd> .reload /u Wdf01000.sys
CMD> del
C:\...\Wdf01000.pdb\...\Wdf01000.pdb
kd> .reload Wdf01000.sys
Sekarang jalankan !lmi untuk memeriksa lagi: PDB akan muncul sebagai sumber yang diindeks dan jendela kode sumber harus muncul.
kd> !lmi Wdf01000.sys
Loaded Module Info: [wdf01000.sys]
...
Load Report: private symbols & lines, source indexed
C:\...\Wdf01000.pdb\...\Wdf01000.pdb
Anda dapat menggunakan penelusuran kesalahan tingkat sumber WDF tidak hanya untuk penelusuran kesalahan langsung dan menganalisis crash dump, tetapi juga untuk mempelajari lebih lanjut tentang internal kerangka kerja dengan mengatur titik henti pada fungsi inti seperti dispatcher IRP dan menjelajahi jalur kode berikutnya.