Interagindo com o mecanismo

Comandos e expressões

A API do mecanismo de depurador fornece métodos para executar comandos e avaliar expressões, como aquelas digitados na Janela de Comando do Depurador do WinDbg. Para executar um comando de depurador, use Executar. Ou, para executar todos os comandos em um arquivo, use ExecuteCommandFile.

O método Evaluate avaliará as expressões usando a sintaxe C++ ou MASM. A sintaxe usada pelo mecanismo do depurador para avaliar expressões, como no método Evaluate , é fornecida por GetExpressionSyntax e pode ser alterada usando SetExpressionSyntaxByName e SetExpressionSyntax. O número de sintaxes diferentes que são reconhecidas pelo depurador é retornado por GetNumberExpressionSyntaxes e seus nomes são retornados por GetExpressionSyntaxNames.

O tipo de valor retornado por Evaluate é determinado pelos símbolos e constantes usados na cadeia de caracteres que foi avaliada. O valor está contido em uma estrutura DEBUG_VALUE e pode ser convertido em diferentes tipos usando CoerceValue e CoerceValues.

Aliases

Aliases são cadeias de caracteres que são substituídas automaticamente por outras cadeias de caracteres quando usadas em expressões e comandos do depurador. Para obter uma visão geral dos aliases, consulte Usando aliases. O mecanismo do depurador tem várias classes de aliases.

Os aliases de nome fixo são indexados por número e têm os nomes $u 0, $u 1, ..., $u 9. Os valores desses aliases podem ser definidos usando o método SetTextMacro e podem ser recuperados usando o método GetTextMacro .

Os aliases automáticos e os aliases nomeados pelo usuário podem ter qualquer nome. Os aliases automáticos são definidos pelo mecanismo do depurador e os aliases nomeados pelo usuário são definidos pelo usuário por meio de comandos do depurador ou da API do mecanismo de depurador. Para definir ou remover um alias nomeado pelo usuário, use o método SetTextReplacement . O método GetTextReplacement retorna o nome e o valor de um alias automático ou um alias nomeado pelo usuário. Todos os aliases nomeados pelo usuário podem ser removidos usando o método RemoveTextReplacements . O método GetNumberTextReplacements retornará o número de aliases automáticos e nome de usuário; isso pode ser usado com GetTextReplacement para iterar em todos esses aliases. O método OutputTextReplacements imprimirá uma lista de todos os aliases nomeados pelo usuário, incluindo seus nomes e valores.

Observe que se um alias nomeado pelo usuário receber o mesmo nome que um alias automático, o alias nomeado pelo usuário ocultará o alias automático para que, ao recuperar o valor do alias por nome, o alias nomeado pelo usuário seja usado.

>Opções do mecanismo

O mecanismo tem várias opções que controlam seu comportamento. Essas opções são listadas em DEBUG_ENGOPT_XXX. Eles são retornados por GetEngineOptions e podem ser definidos usando SetEngineOptions. Opções individuais podem ser definidas usando AddEngineOptions e unset usando RemoveEngineOptions.

Interrupções

Uma interrupção é uma maneira de forçar uma quebra no depurador ou dizer ao mecanismo para parar de processar o comando atual, por exemplo, pressionando Ctrl+Break no WinDbg.

Para solicitar uma quebra no depurador ou interromper a tarefa atual do depurador, use SetInterrupt. Para marcar se houve uma interrupção, use GetInterrupt.

Nota Ao realizar uma tarefa longa de uma extensão de depurador, é recomendável que a extensão marcar GetInterrupt regularmente e interrompa o processamento se uma interrupção tiver sido solicitada.

Ao solicitar uma interrupção no depurador, o mecanismo poderá atingir o tempo limite se demorar muito para o destino realizar o arrombamento. Isso pode ocorrer se o destino estiver em um estado não responsivo ou se a solicitação de interrupção estiver bloqueada ou atrasada por contenção de recursos. O período de tempo que o mecanismo aguardará é retornado por GetInterruptTimeout e pode ser definido usando SetInterruptTimeout.