Partilhar via


Usando o Depurador e Logexts.dll

Uma maneira de ativar o Logger é iniciar o CDB ou o WinDbg e anexar a um aplicativo de destino no modo de usuário, como de costume. Em seguida, use o comando de extensão !logexts.logi ou !logexts.loge .

Isso inserirá o código no ponto de interrupção atual que saltará para uma rotina que carrega e inicializa Logexts.dll no processo de aplicativo de destino. Isso é chamado de "injetar Agente no aplicativo de destino".

Na verdade, haverá duas instâncias de Logexts.dll em execução, pois esse módulo é uma DLL de extensão de depurador e o programa que é injetado no aplicativo de destino. O depurador e as instâncias de destino de Logexts.dll se comunicam por meio de uma seção compartilhada de memória que inclui os identificadores de arquivo de saída, a máscara de categoria atual e um ponteiro para o buffer de saída do log.

Anexando ao aplicativo de destino

Para obter informações sobre como anexar o depurador ao aplicativo de destino, consulte Depurando um processo de User-Mode usando WinDbg ou Depurando um processo de User-Mode usando CDB.

Usando os Comandos de Extensão do Agente

Para obter a sintaxe completa de cada extensão, consulte sua página de referência.

!logexts.logi
Injeta o Agente no aplicativo de destino. Isso inicializa o registro em log, mas não o habilita.

!logexts.loge
Habilita o registro em log. Se !logexts.logi não tiver sido usado, essa extensão será inicializada e habilitará o registro em log.

!logexts.logd
Desabilita o registro em log. Isso fará com que todos os ganchos de API sejam removidos em um esforço para permitir que o programa seja executado livremente. Os ganchos COM não são removidos porque não podem ser habilitados novamente à vontade.

!logexts.logo
Exibe ou modifica as opções de saída. Três tipos de saída são possíveis: mensagens enviadas diretamente para o depurador, um arquivo de texto ou um arquivo .lgv. O arquivo .lgv contém muito mais informações do que os outros dois; ele pode ser lido com LogViewer.

Se você desabilitar a saída do arquivo de texto, um arquivo .txt de tamanho zero ainda será criado. Isso pode substituir um arquivo de texto salvo anteriormente no mesmo local.

!logexts.logc
Exibe categorias de API disponíveis, controla quais categorias serão registradas e quais não serão e exibe as APIs contidas em qualquer categoria.

Se uma categoria estiver desabilitada, os ganchos para todas as APIs nessa categoria serão removidos para que não haja mais sobrecarga de desempenho. Os ganchos COM não são removidos porque não podem ser habilitados novamente à vontade.

Habilitar apenas determinadas categorias pode ser útil quando você só está interessado em um tipo específico de interação que o programa está tendo com o Windows , por exemplo, operações de arquivo. Isso reduz o tamanho do arquivo de log e também reduz o efeito que o Agente tem na velocidade de execução do processo.

!logexts.logb
Exibe ou libera o buffer de saída atual. Como consideração de desempenho, a saída de log é liberada para o disco somente quando o buffer de saída está cheio. Por padrão, o buffer é de 2144 bytes.

Como a memória do buffer é gerenciada pelo aplicativo de destino, a gravação automática do buffer nos arquivos de log no disco não ocorrerá se houver uma violação de acesso ou algum outro erro não recuperável no aplicativo de destino. Nesses casos, você deve usar esse comando para liberar manualmente o buffer para o disco ou então as APIs registradas mais recentemente podem não aparecer nos arquivos de log.

!logexts.logm
Exibe ou cria uma lista de inclusão/exclusão de módulo. Geralmente, é desejável registrar apenas as chamadas à API feitas de um determinado módulo ou conjunto de módulos. Para facilitar isso, o Agente permite que você especifique uma lista de inclusão de módulo ou, como alternativa, uma lista de exclusão de módulo. Por exemplo, você usaria uma lista de inclusão se quisesse apenas registrar chamadas de um ou dois módulos. Se você quisesse registrar chamadas feitas de todos os módulos, exceto uma pequena lista de módulos, usaria uma lista de exclusão. Os módulos Logexts.dll e Kernel32.dll são sempre excluídos, pois o Agente não tem permissão para fazer logon em si.