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.