Bagikan melalui


Video: Men-debug driver Anda dengan kode sumber WDF

Topik ini berisi tutorial video yang menunjukkan cara men-debug driver Windows Driver Frameworks (WDF) Anda dengan akses penuh ke kode sumber WDF. Mengikuti video adalah prosedur langkah demi langkah yang diikuti dalam video, untuk referensi yang nyaman.

Penelusuran kesalahan sumber WDF memungkinkan Anda untuk melangkah bebas ke kode kerangka kerja 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 mesin 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, Pratinjau Teknis build 10041 atau yang lebih baru. Build ini memiliki file simbol terindeks sumber privat untuk KMDF (Wdf01000.sys) dan UMDF (Wudfx02000.dll) yang tersedia di Microsoft Public Symbol Server. Penelusuran kesalahan tingkat sumber kode WDF hanya tersedia di WinDbg, dan bukan di debugger Visual Studio.

Mulai Cepat

Mulai sesi debug kernel WinDbg ke komputer target, istirahat, dan ikuti langkah-langkah berikut:

  1. Atur jalur simbol default menggunakan .symfix. Ini mengatur jalur simbol untuk menunjuk ke server simbol di https://msdl.microsoft.com/download/symbols.

    kd> .symfix

  2. Atur 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*
    
  3. 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, Wdf01000.sys PDB diindeks sumber. Jika anda tidak, lihat bagian Penyiapan 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.pdb
    
  4. Sekarang Anda sudah siap! Cara mudah untuk menelusuri kode sumber WDF adalah dengan mengatur titik henti pada rutinitas pengiriman IRP kerangka kerja, lalu menelusuri kode lainnya. Karena sistem Windows memiliki banyak driver KMDF kotak masuk, WDF selalu dimuat dan berjalan, sehingga breakpoint ini akan segera dipukul (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.

Mengaktifkan Debugging Mode 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 kedaluarsa. Untuk memperbaikinya, bongkar PDB dari WinDbg, kosongkan 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 akan 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.