Usando a Janela de Observação - WinDbg (Clássico)

A janela Inspeção exibe informações sobre variáveis globais, variáveis locais e registros. Você pode personalizar essa janela para mostrar os itens que está rastreando.

Abrir a janela de observação

Para abrir ou alternar para a janela Observação, na janela WinDbg, no menu Ver, clique em Observação.

Você também pode pressionar ALT+2 ou clicar no botão Watch (ALT+2) na barra de ferramentas: Captura de tela do botão Watch na barra de ferramentas.

ALT+SHIFT+2 fechará a janela de Monitorização.

A captura de tela a seguir mostra um exemplo de uma janela de observação.

Captura de tela de um exemplo de janela Watch no WinDbg.

A janela Watch pode conter quatro colunas. As colunas Nome e Valor são sempre exibidas, e as colunas Tipo e Local são opcionais. Para exibir as colunas Tipo e Localização, clique nos botões Definição de Tipo e Localizações, respectivamente, na barra de ferramentas.

Na janela de Observação, pode fazer o seguinte:

  • Para adicionar uma variável à janela Inspeção, selecione a primeira célula vazia na coluna Nome, digite o nome da variável e pressione ENTER. Separe o nome do módulo da variável com um ponto de exclamação (!). Se você não especificar um módulo, o módulo atual será usado. Para inserir um endereço no campo Nome , o endereço deve começar com um dígito decimal (se necessário, use o prefixo 0x).

    Se o nome da variável que você inseriu estiver definido no escopo da função atual, seu valor aparecerá na coluna Valor. Se não estiver definido, a coluna Valueexibirá "Erro: Não é possível obter o valor".

    Mesmo que uma variável não esteja definida, pode ser útil adicioná-la à janela de Inspeção. Se o contador do programa entra em uma função na qual uma variável desse nome é definida, seu valor aparece na janela naquele momento.

  • Para remover uma variável da janela Inspeção, clique duas vezes em seu nome, pressione DELETE e, em seguida, pressione ENTER. Você também pode substituir um nome antigo por um novo clicando duas vezes no nome antigo, digitando o novo nome e pressionando ENTER.

  • Se uma variável for uma estrutura de dados, uma caixa de seleção será exibida ao lado de seu nome. Para expandir e recolher a exibição dos membros da estrutura, marque ou desmarque a caixa de seleção.

  • Inteiros do tipo int são exibidos como valores decimais; inteiros do tipo UINT são exibidos no radix atual. Para alterar a base numérica atual, use o comando n (definir base numérica) na janela de comando do depurador.

  • Para alterar o valor de uma variável local, clique duas vezes na célula Valor. Insira o novo valor ou edite o valor antigo. (Os comandos cortar, copiar e colar estão disponíveis para edição.) O valor inserido pode incluir qualquer expressão C++ . Depois de inserir um novo valor ou editar o valor antigo, você pode pressionar ENTER para armazenar o novo valor ou pressionar ESC para descartá-lo. Se você enviar um valor inválido, o valor antigo reaparecerá depois que você pressionar ENTER.

    Inteiros do tipo int são exibidos como valores decimais; inteiros do tipo UINT são exibidos no radix atual. Para alterar o radix atual, use o comando n (definir base numérica) na janela de Comando do Depurador.

  • A coluna Tipo (se for exibida na janela Inspeção) mostra o tipo de dados atual de cada variável. Cada variável é exibida no formato adequado para seu próprio tipo de dados. As estruturas de dados têm seus nomes de tipo na coluna Tipo . Outros tipos de variáveis exibem "Inserir novo tipo" nesta coluna.

    Se você clicar duas vezes em "Inserir novo tipo", você pode converter o tipo inserindo um novo tipo de dados. Este elenco altera a exibição atual desta variável apenas na janela Observação; ele não altera nada no depurador ou no computador de destino. Além disso, se você inserir um novo valor na coluna Valor, o texto inserido será analisado com base no tipo real do símbolo, em vez de qualquer novo tipo que você possa ter inserido na coluna Tipo . Se você fechar e reabrir a janela Inspeção, perderá as alterações de tipo de dados.

    Você também pode inserir um comando de extensão na colona Tipo. O depurador passará o endereço do símbolo para essa extensão e exibirá a saída resultante em uma série de linhas expansíveis abaixo da linha corrente. Por exemplo, se o símbolo nesta linha for um endereço válido para um bloco de ambiente de thread, você poderá inserir !teb na coluna Tipo para executar a extensão !teb no endereço desse símbolo.

  • A coluna Local (se for exibida na janela de Inspeção) mostra o deslocamento de cada membro de uma estrutura de dados.

  • Além das variáveis, pode-se também monitorizar os itens seguintes na janela de Observação:

    • Registos. Quando você adiciona um registro à janela Observação, prefixe seu nome com um sinal de arroba (@). Ao contrário das variáveis, não é possível alterar os valores do registo através da janela Monitorização.
    • Vtables que contêm ponteiros de função. Quando um Vtable aparece na janela Inspeção, você pode procurar as entradas de função na tabela. Se um Vtable estiver contido em uma classe base que aponte para uma implementação derivada, a notação _vtcast_Class será exibida para indicar os membros que estão sendo adicionados devido à classe derivada. Esses membros expandem-se à semelhança do tipo de classe derivada.
    • Os valores de retorno de funções de extensão, como _EFN_GetPoolData.

Ao contrário da janela Locais, a janela Inspeção não é afetada por alterações no contexto de registo . Na janela Inspeção, você pode ver e modificar apenas as variáveis definidas no escopo do contador do programa atual.

Se abrir um novo espaço de trabalho, o conteúdo da janela Observação será descartado e substituído pelos da nova área de trabalho.

Barra de ferramentas e menu de atalho

A janela Watch tem uma barra de ferramentas que contém dois botões (Typecast e Locations) e um menu de atalho com comandos adicionais. Para aceder ao menu, clique com o botão direito do rato na barra de título da janela ou clique no ícone junto ao canto superior direito da janela: Captura de ecrã do ícone do botão para aceder ao menu de atalho da janela de verificação da barra de ferramentas.

A barra de ferramentas e o menu contêm os seguintes botões e comandos:

  • (Barra de ferramentas e menu) Typecast ativa e desativa a exibição da coluna Tipo .

  • (Barra de ferramentas e menu) Localizações ativa e desativa a apresentação da coluna Localização.

  • (Somente menu) Exibir valores de 16 bits como Unicode exibe cadeias de caracteres Unicode nesta janela. Este comando ativa e desativa uma configuração global que afeta a janela Locais, a janela de Inspeção e a saída dos comandos do depurador. Este comando é equivalente ao uso do comando.enable_unicode (Enable Unicode Display).

  • (Somente menu) Sempre exibir números no radix padrão faz com que inteiros sejam exibidos no radix padrão em vez de sempre exibi-los no formato decimal. Este comando ativa e desativa uma configuração global que afeta a janela Locais, a janela Inspeção e a saída de comandos do depurador. Este comando é equivalente a usar o comando .force_radix_output (Use Radix for Integers).

    Observação O comando Sempre mostrar números na base padrão não afeta números inteiros longos. Inteiros longos são exibidos em formato decimal, a menos que o comando .enable_long_status (Enable Long Integer Display) seja usado. O comando .enable_long_status afeta a exibição na janela de Locais, na janela de Inspeção e na saída do comando do depurador. Não há equivalente para este comando no menu da janela de Inspeção.

  • (Somente menu) Abrir janela de memória para o valor selecionado abre uma nova janela de Memória acoplada que exibe a memória começando no endereço da expressão selecionada.

  • (Somente menu) Invocar dt para o valor de memória selecionado executa o comando dt (Display Type) com o símbolo selecionado como parâmetro. O resultado aparece na janela Debugger Command. A opção -n é usada automaticamente para diferenciar o símbolo de um endereço hexadecimal. Nenhuma outra opção é usada. Observe que o conteúdo produzido usando essa seleção de menu é idêntico ao conteúdo produzido ao executar o comando dt da linha de comando, mas o formato é ligeiramente diferente.

  • (Somente menu) liga/desliga a barra de ferramentas.

  • (Apenas menu) Encaixar ou Libertar faz com que a janela entre ou saia do estado encaixado.

  • (Apenas no menu) Mover para uma nova doca fecha a janela de Monitorização e abre-a numa nova doca.

  • (Apenas menu) Definir como destino de encaixe de tabulação para o tipo de janela não está disponível para a janela Watch. Esta opção só está disponível para as janelas de origem ou de memória .

  • (Apenas menu) Sempre flutuante faz com que a janela permaneça desancorada, mesmo quando é arrastada para um local de acoplamento.

  • (Somente no menu) Mover com o quadro faz a janela mover-se quando o quadro WinDbg é movido, mesmo que a janela esteja desencaixada.

  • (Somente menu) Ajuda abre este tópico na secção de documentação das Ferramentas de Depuração para Windows.

  • (Apenas menu) Fechar fecha esta janela.

Ver também

Para obter mais informações sobre como controlar variáveis e uma descrição de outros comandos relacionados à memória, consulte Reading and Writing Memory. Para obter mais informações sobre registros e sua manipulação, consulte Exibindo e editando registros no WinDbg (clássico).