Compartilhar via


Usando DBH

DBH é uma ferramenta de linha de comando que expõe muitas das funções na API DbgHelp (dbghelp.dll). Ele pode exibir informações sobre o conteúdo de um arquivo de símbolo, exibir detalhes específicos dos símbolos no arquivo e pesquisar no arquivo por símbolos que correspondam a vários critérios. Para obter mais informações, consulte Biblioteca de Ajuda de Depuração.

A funcionalidade fornecida pelo DBH é semelhante àquela fornecida no WinDbg, KD e CDB por comandos como x (Examine Symbols).

Executando DBH no modo interativo

Você inicia o DBH com uma linha de comando simples, na qual você especifica o módulo de destino cujos símbolos deseja investigar. Um módulo de destino pode ser um programa EXE ou um arquivo de símbolo PDB. Você também pode especificar uma ID de processo (PID) para investigar. Consulte Opções de linha de comando DBH para obter a sintaxe completa.

Quando o DBH é iniciado, ele carrega os símbolos para o módulo especificado e, em seguida, apresenta um prompt no qual você pode digitar uma variedade de comandos. Consulte Comandos DBH para obter uma lista de comandos disponíveis.

Por exemplo, a sequência a seguir inicia o DBH especificando o processo de destino com o ID do processo 4672, executa o comando enum no prompt do DBH para exibir símbolos correspondentes a um padrão específico e, em seguida, executa o comando q para sair do DBH:

C:\> dbh -p:4672 
            400000 : TimeTest
          77820000 : ntdll
          77740000 : kernel32

pid:4672 mod:TimeTest[400000]: enum TimeTest!ma* 

 index            address     name
     1             42cc56 :   main
     3             415810 :   malloc
     5             415450 :   mainCRTStartup

pid:4672 mod:TimeTest[400000]: q 

goodbye 

Executando DBH no modo de lote

Se desejar executar apenas um único comando DBH, você poderá especificá-lo no final da linha de comando. Isso faz com que o DBH inicie, carregue o módulo especificado, execute o comando especificado e saia.

Por exemplo, o exemplo anterior pode ser substituído por uma única linha de comando:

C:\> dbh -p:4672 enum TimeTest!ma* 
           400000 : TimeTest
         77820000 : ntdll
         77740000 : kernel32

index            address     name
    1             42cc56 :   main
    3             415810 :   malloc
    5             415450 :   mainCRTStartup 

Esse método de execução do DBH é chamado de modo em lote, porque pode ser facilmente usado em arquivos em lote. Esta versão da linha de comando também pode ser seguida por um pipe ( | ) que redireciona a saída DBH para outro programa.

Especificando o destino

O DBH pode selecionar um destino de três maneiras: pela ID do processo de um processo em execução, pelo nome do executável ou pelo nome do arquivo de símbolo. Por exemplo, se houver exatamente uma instância de MyProg.exe em execução no momento, com a ID de processo 1234, os seguintes comandos serão quase equivalentes:

C:\> dbh -v -p:1234 
C:\> dbh -v c:\mydir\myprog.exe 
C:\> dbh -v c:\mydir\myprog.pdb 

Uma diferença entre esses comandos é que, quando você inicia o DBH especificando a ID do processo, o DBH usa os endereços virtuais reais que estão sendo usados por esse processo. Quando você inicia o DBH especificando o nome do executável ou o nome do arquivo de símbolo, o DBH assume que o endereço base do módulo é um valor padrão (por exemplo, 0x01000000). Você pode então usar o comando base para especificar o endereço base real, mudando assim os endereços de todos os símbolos no módulo.

O DBH não se anexa ao processo de destino da maneira que um depurador faz. O DBH não pode fazer com que um processo comece ou termine, nem pode alterar a forma como esse processo é executado. Para que o DBH seja anexado a um processo por sua ID de processo, o processo de destino precisa estar em execução, mas uma vez que o DBH tenha sido iniciado, o processo de destino pode ser encerrado e o DBH continuará a acessar seus símbolos.

Símbolos decorados e não decorados

Por padrão, o DBH usa nomes de símbolos não decorados ao exibir e pesquisar símbolos. Se você desativar a opção de símbolo SYMOPT_UNDNAME ou incluir a opção -d na linha de comando DBH, as decorações serão incluídas.

Para obter informações sobre decorações de símbolos, consulte Símbolos públicos e privados.

Saindo do DBH

Para sair do DBH, use o comando q no prompt do DBH.