Usando comandos de extensão do depurador
O uso de comandos de extensão do depurador é muito semelhante ao uso de comandos do depurador. O comando é digitado na janela Comando do Depurador, produzindo uma saída nessa janela ou uma alteração no aplicativo de destino ou no computador de destino.
Um comando de extensão do depurador real é um ponto de entrada em uma DLL chamada pelo depurador.
As extensões do depurador são invocadas pela seguinte sintaxe:
! [módulo.]extensão [argumentos]
O nome do módulo não deve ser seguido pela extensão de nome de arquivo .dll. Se module incluir um caminho completo, o limite de tamanho de string padrão será de 255 caracteres.
Se o módulo ainda não tiver sido carregado, ele será carregado no depurador usando uma chamada para LoadLibrary(module). Depois que o depurador carrega a biblioteca de extensão, ele chama a função GetProcAddress para localizar o nome da extensão no módulo de extensão. O nome da extensão diferencia maiúsculas de minúsculas e deve ser inserido exatamente como aparece no arquivo .def do módulo de extensão. Se o endereço do ramal for encontrado, o ramal será chamado.
Ordem de pesquisa
Se o nome do módulo não for especificado, o depurador pesquisará os módulos de extensão carregados para essa exportação.
A ordem de pesquisa padrão é a seguinte:
Os módulos de extensão que funcionam com todos os sistemas operacionais e em ambos os modos: Dbghelp.dll e winext\ext.dll.
O módulo de extensão que funciona em todos os modos, mas é específico do sistema operacional. Para Windows XP e versões posteriores do Windows, isso é winxp\exts.dll.
O módulo de extensão que funciona com todos os sistemas operacionais, mas é específico do modo. Para o modo kernel, isso é winext\kext.dll. Para o modo de usuário, isso é winext\uext.dll.
O módulo de extensão que é específico do sistema operacional e específico do modo. A tabela a seguir especifica esse módulo.
Modo de usuário | Modo kernel |
---|---|
winxp \ ntsdexts.dll | winxp \ kdexts.dll |
Quando um módulo de extensão é descarregado, ele é removido da cadeia de pesquisa. Quando um módulo de extensão é carregado, ele é adicionado ao início da ordem de pesquisa. O comando .setdll (Definir DLL de Extensão Padrão) pode ser usado para promover qualquer módulo para o topo da cadeia de pesquisa. Ao usar esse comando repetidamente, você pode controlar completamente a cadeia de pesquisa.
Use o comando .chain (Listar extensões do depurador) para exibir uma lista de todos os módulos de extensão carregados em sua ordem de pesquisa atual.
Se você tentar executar um comando de extensão que não esteja em nenhum dos módulos de extensão carregados, receberá uma mensagem de erro Exportar não encontrado.