Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este tópico contém um tutorial em vídeo que mostra como depurar o driver WDF (Windows Driver Frameworks) com acesso total ao código-fonte WDF. A seguir ao vídeo, apresenta-se o procedimento passo-a-passo para sua conveniência.
A depuração do código-fonte WDF permite-lhe entrar livremente no código do framework sem precisar baixar o código-fonte WDF. O depurador baixa automaticamente a versão correta do WDF do GitHub.
Por exemplo, se você estiver usando o WinDbg para depurar o driver WDF em uma máquina Windows 10 e o depurador estiver quebrado com o código da estrutura na pilha de chamadas, você poderá clicar duas vezes no quadro WDF na visualização Pilha de chamadas e o WinDbg baixará e abrirá automaticamente o arquivo de origem WDF relevante na linha correspondente. Em seguida, você pode percorrer o código e definir pontos de interrupção.
Este recurso está disponível para sistemas de destino que executam versões públicas do Windows 10, Technical Preview build 10041 ou posterior. Essas compilações têm arquivos de símbolos indexados de origem privada para KMDF (Wdf01000.sys) e UMDF (Wudfx02000.dll) disponíveis no Microsoft Public Symbol Server. A depuração no nível de origem do código WDF só está disponível no WinDbg e não no depurador do Visual Studio.
Início Rápido
Inicie uma sessão de depuração do kernel WinDbg na máquina de destino, entre e siga estas etapas:
Defina o caminho do símbolo padrão usando .symfix. Isso define o caminho do símbolo para apontar para o servidor de símbolos em https://msdl.microsoft.com/download/symbols.
kd> .symfixDefina o caminho de origem padrão usando .srcfix. Isso define o caminho de origem para srv*, o que informa ao depurador que deve recuperar os arquivos de origem dos locais especificados nos arquivos de símbolo dos módulos de destino.
kd> .srcfix Source search path is: SRV*Recarregue símbolos usando .reload e confirme se os símbolos Wdf01000.sys (ou Wudfx02000.dll para UMDF) estão indexados na fonte. Como mostra a saída de !lmi abaixo, o Wdf01000.sys PDB está indexado na origem. Se o seu não estiver, consulte a seção Configuração do WinDbg abaixo.
kd> .reload ... kd> !lmi wdf01000.sys Loaded Module Info: [wdf01000.sys] ... Load Report: private symbols & lines, source indexed C:\...\Wdf01000.pdb\...\Wdf01000.pdbAgora está tudo pronto! Uma maneira fácil de percorrer o código-fonte WDF é definir um ponto de interrupção na rotina de despacho de IRP da estrutura e, em seguida, percorrer o restante do código. Como um sistema Windows tem muitos drivers KMDF na caixa de entrada, o WDF está sempre carregado e em execução, portanto, esse ponto de interrupção será atingido imediatamente (sem a necessidade de carregar seu próprio driver).
kd> bp Wdf01000!FxDevice::DispatchWithLock kd> g Breakpoint 0 hit Wdf01000!FxDevice::DispatchWithLock: 87131670 8bff mov edi,edi
Se isso não funcionar, confira as etapas de instalação do WinDbg abaixo.
Configuração do WinDbg
Se o exemplo acima não funcionou como esperado, talvez seja necessário executar uma ou mais das instruções abaixo.
Ativar o modo de depuração de origem
Verifique se a depuração no Modo Fonte está habilitada. Abra o menu Depurar e confirme se o Modo de origem está marcado.
Limpar cache de símbolos obsoletos
Se você depurou anteriormente drivers WDF para o mesmo destino do Windows, então você pode estar usando os símbolos WDF armazenados em cache localmente que não foram indexados de origem. Você pode verificar isso com o comando !lmi:
kd> !lmi Wdf01000.sys
Loaded Module Info: [wdf01000.sys]
...
Load Report: private symbols & lines, not source indexed
C:\...\Wdf01000.pdb\...\Wdf01000.pdb
De acordo com Relatório de Carga acima, Wdf01000.pdb não é indexado por origem. Isso significa que o cache de símbolos WinDbg local está obsoleto. Para corrigir isso, descarregue o PDB do WinDbg, limpe o cache local (seu caminho pode diferir com base na saída !lmi acima) e recarregue o PDB:
kd> .reload /u Wdf01000.sys
CMD> del
C:\...\Wdf01000.pdb\...\Wdf01000.pdb
kd> .reload Wdf01000.sys
Agora execute !lmi para verificar novamente: o PDB deve aparecer como fonte indexada e uma janela de código-fonte deve aparecer.
kd> !lmi Wdf01000.sys
Loaded Module Info: [wdf01000.sys]
...
Load Report: private symbols & lines, source indexed
C:\...\Wdf01000.pdb\...\Wdf01000.pdb
Você pode usar a depuração no nível de origem do WDF não apenas para depuração ao vivo e análise de despejos de memória de falha, mas também para aprender mais sobre a estrutura interna do framework, definindo pontos de interrupção em funções principais, como o dispatcher IRP, e explorar os caminhos de código subsequentes.