Usando a linguagem de marcação do depurador

Os comandos do depurador podem fornecer saída em texto sem formatação ou em um formato aprimorado que usa DML (Linguagem de Marcação do Depurador). A saída aprimorada com DML inclui links que você pode clicar para executar comandos relacionados.

O DML está disponível em Windows 10 e posterior.

Comandos compatíveis com DML

Os comandos a seguir são capazes de gerar saída DML:

O comando lmD é um exemplo de um comando que é capaz de fornecer saída DML. O comando lmD exibe uma lista de módulos carregados. Como mostra a imagem a seguir, cada nome de módulo é um link que você pode clicar para obter informações mais detalhadas sobre o módulo.

Captura de tela da saída do comando lmD no depurador.

A imagem a seguir mostra o resultado de clicar no link usbuhci . A saída inclui links adicionais que permitem explorar mais detalhes do módulo usbuhci.

Captura de tela dos detalhes do módulo usbuhci no depurador.

Ativando e desativando o DML

O comando .prefer_dml ativa ou desativa o DML. Quando o DML é ativado (.prefer_dml 1), os comandos que são capazes de gerar saída DML gerarão saída DML por padrão.

Aprimoramentos do console

Todos os depuradores do Windows agora têm áreas de saída de comando que dão suporte à análise de DML. No windbg, a janela de comando dá suporte a todo o comportamento DML e mostrará cores, estilos de fonte e links. Os depuradores de console, ntsd, cdb e kd, dão suporte apenas aos atributos de cor do DML e ao serem executados em um console verdadeiro com o modo de cor habilitado. Os depuradores com E/S redirecionada, sessões ntsd –d ou remote.exe não exibirão nenhuma cor.

Modo de Cor do Depurador do Console

Os depuradores de console, ntsd, cdb e kd agora têm a capacidade de exibir a saída colorida ao serem executados em um console verdadeiro. Esse não é o padrão, requer que o modo de cor seja habilitado explicitamente por meio de tools.ini. O novo col_mode <token verdadeiro|falso> no tools.ini controla a configuração do modo de cor. Para obter mais informações sobre como trabalhar com o arquivo tools.ini, consulte Configurando tools.ini

Quando o modo de cor está habilitado, o depurador pode produzir saída colorida. Por padrão, a maioria das cores não é definida e, em vez disso, usa como padrão as cores atuais do console.

Janela do navegador de comando Windbg

No Windows 10 e posterior, a janela do navegador de comando analisa e exibe o DML. Todas as marcas, como <modificações de link>, <exec> e aparência, têm suporte total.

Para iniciar uma sessão do navegador de comandos usando o menu no WinDbg, selecione Exibir, Navegador de Comandos. O comando> .browse <na janela de comando abrirá uma nova janela do navegador de comandos e executará o comando especificado. Para obter mais informações, consulte Usando a janela do navegador de comandos no WinDbg (clássico). Uma nova janela do navegador de comandos também pode ser aberta com Ctrl+N.

A janela do navegador de comando imita deliberadamente o comportamento de um navegador da Web, com um histórico suspenso e botões anteriores/próximos. A lista suspensa histórico exibe apenas os últimos vinte comandos, mas o histórico completo é mantido, portanto, voltando aos comandos, você pode obter a lista suspensa para exibir o histórico mais antigo.

Você pode ter tantas janelas de comando abertas ao mesmo tempo quanto desejar. As janelas de comando persistem em workspaces, mas salvam apenas o comando atual; a história não é mantida.

O menu Exibição do WinDbg tem uma opção Definir Comando iniciar do navegador que permite que um usuário defina um comando preferencial para novas janelas do navegador para começar, como .dml_start. Esse comando é salvo em workspaces.

Uma sub-janela Comandos Recentes está disponível no menu Exibir para manter comandos de interesse. Selecionar um comando recente abre um novo navegador com o comando fornecido. Há um item de menu no menu de contexto da janela do navegador que adiciona o comando atual da janela à lista de comandos recentes. A lista de comandos recentes é mantida em workspaces.

A janela do navegador de comandos executa o comando de forma síncrona e, portanto, não exibe a saída até que o comando seja concluído. Comandos de longa execução não mostrarão nada até que tenham terminado.

Os links têm um menu de contexto de clique com o botão direito do mouse semelhante ao menu de contexto de clique com o botão direito do mouse em um navegador da Web. Os links podem ser abertos em uma nova janela do navegador. O comando de um link pode ser copiado para a área de transferência para uso.

Clique no ícone próximo ao canto superior direito da barra de título para definir as janelas do navegador de comandos como atualização automática ou atualização manual. Os navegadores de atualização automática executarão automaticamente seu comando em alterações de estado do depurador. Isso mantém a saída ativa, mas ao custo de executar o comando em todas as alterações. A atualização automática está ativada por padrão. Se o navegador não precisar estar ativo, o menu de contexto da janela poderá ser usado para desabilitar a atualização automática.

Como os comandos são executados pelo mecanismo, não pela interface do usuário, comandos específicos da interface do usuário, como .cls (Clear Screen), retornarão um erro de sintaxe em quando usados nas janelas do navegador de comandos. Isso também significa que, quando a interface do usuário for um cliente remoto, o comando será executado pelo servidor, não pelo cliente, e a saída do comando mostrará o estado do servidor.

As janelas do navegador de comando podem executar qualquer comando do depurador, ele não precisa ser um comando que produz DML. Você pode usar janelas do navegador para ter um conjunto arbitrário de comandos ativos para uso.

Personalizando DML

O DML define um pequeno conjunto de marcas que podem ser incluídas na saída do comando. Um exemplo é a marca de <link> . Você pode experimentar a marca de <link> (e outras marcas DML) usando os comandos .dml_start e .browse . O comando .browse .dml_startfilepath executa os comandos armazenados em um arquivo DML. A saída é exibida na janela Navegador de Comandos em vez da janela de comando regular.

Suponha que o arquivo c:\DmlExperiment.txt contém as linhas a seguir.

My DML Experiment
<link cmd="lmD musb*">List modules that begin with usb.</link>

O comando a seguir exibe o texto e o link na janela Navegador de Comandos.

.browse .dml_start c:\Dml_Experiment.txt

Captura de tela da saída do arquivo DML na janela Navegador de Comandos.

Se você clicar nos módulos lista que começam com o link usb, verá uma saída semelhante à imagem a seguir.

Captura de tela da lista de módulos depois de clicar no link na saída do arquivo DML.

Para obter uma discussão completa sobre a personalização de DML e uma lista completa de marcas DML, consulte Personalizando a saída do depurador usando DML.