Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе содержится видеоролик, в котором показано, как отлаживать драйвер Windows Driver Framework (WDF) с полным доступом к исходному коду WDF. После этого видео выполняется пошаговая процедура, описанная в видео, для удобной справки.
Отладка источника WDF позволяет свободно переходить в код платформы без необходимости скачивать исходный код WDF. Отладчик автоматически загружает правильную версию WDF из GitHub.
Например, если вы используете WinDbg для отладки драйвера WDF на компьютере с Windows 10, и отладчик остановился на коде платформы в стеке вызовов, вы можете дважды щелкнуть на фрейме WDF в представлении стека вызовов, и WinDbg автоматически скачает и откроет соответствующий исходный файл WDF на нужной строке. Затем можно выполнить шаги по коду и задать точки останова.
Эта функция доступна для целевых систем под управлением общедоступных выпусков Windows 10, Technical Preview сборки 10041 или более поздней версии. Эти сборки имеют файлы символов с индексированием частного источника для KMDF (Wdf01000.sys) и UMDF (Wudfx02000.dll) доступны на сервере символов Microsoft Public Symbol Server. Отладка на уровне источника кода WDF доступна только в WinDbg, а не в отладчике Visual Studio.
Краткое руководство
Запустите сеанс отладки ядра WinDbg на целевом компьютере, прервите его выполнение и выполните следующие действия:
Задайте путь символа по умолчанию с помощью Symfix. При этом путь к символам указывает на сервер символов https://msdl.microsoft.com/download/symbols.
kd> .symfixЗадайте исходный путь по умолчанию с помощью SRCFIX. Это задает исходный путь к srv*, который сообщает отладчику получать исходные файлы из расположений, указанных в файлах символов целевых модулей.
kd> .srcfix Source search path is: SRV*Перезагрузите символы с помощью .reload и убедитесь, что символы Wdf01000.sys (или Wudfx02000.dll для UMDF) индексируются по исходным файлам. Как показано в выходных данных !lmi ниже, PDB Wdf01000.sys индексирован исходным кодом. Если у вас нет, см. раздел настройки WinDbg ниже.
kd> .reload ... kd> !lmi wdf01000.sys Loaded Module Info: [wdf01000.sys] ... Load Report: private symbols & lines, source indexed C:\...\Wdf01000.pdb\...\Wdf01000.pdbТеперь вы готовы! Простой способ выполнить переход к исходному коду WDF — задать точку останова в подпрограмме отправки IRP платформы, а затем выполнить остальные действия кода. Так как система Windows имеет множество драйверов KMDF в папке "Входящие", WDF всегда загружается и выполняется, поэтому эта точка останова будет достигнута сразу (без необходимости загружать собственный драйвер).
kd> bp Wdf01000!FxDevice::DispatchWithLock kd> g Breakpoint 0 hit Wdf01000!FxDevice::DispatchWithLock: 87131670 8bff mov edi,edi
Если это не работает, ознакомьтесь с приведенными ниже инструкциями по настройке WinDbg.
Настройка WinDbg
Если приведенный выше пример не работал должным образом, может потребоваться выполнить одну или несколько приведенных ниже инструкций.
Включение отладки в режиме источника
Убедитесь, что отладка в режиме источника включена. Откройте меню отладки и убедитесь, что установлен режим источника.
Очистка кэша устаревших символов
Если вы ранее отладили драйверы WDF для того же целевого объекта Windows, возможно, вы будете использовать локально кэшированные символы WDF, которые не были индексированы источником. Вы можете проверить это с помощью команды !lmi:
kd> !lmi Wdf01000.sys
Loaded Module Info: [wdf01000.sys]
...
Load Report: private symbols & lines, not source indexed
C:\...\Wdf01000.pdb\...\Wdf01000.pdb
Согласно приведенному выше отчету о загрузке, Wdf01000.pdb не индексируется по исходному коду. Это означает, что локальный кэш символов WinDbg устарел. Чтобы устранить эту проблему, выгрузите PDB из WinDbg, очистите локальный кэш (путь может отличаться в зависимости от выходных данных !lmi выше) и перезагрузите PDB:
kd> .reload /u Wdf01000.sys
CMD> del
C:\...\Wdf01000.pdb\...\Wdf01000.pdb
kd> .reload Wdf01000.sys
Теперь запустите !lmi, чтобы проверить еще раз: PDB должен отображаться как исходный индексированный, а окно исходного кода должно появиться.
kd> !lmi Wdf01000.sys
Loaded Module Info: [wdf01000.sys]
...
Load Report: private symbols & lines, source indexed
C:\...\Wdf01000.pdb\...\Wdf01000.pdb
Отладку на уровне источника WDF можно использовать не только для динамической отладки и анализа аварийных дампов, но и для изучения внутренних компонентов платформы, задав точки останова для основных функций, таких как диспетчер IRP и изучение последующих путей кода.