Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Há vários métodos que podem ser usados para determinar informações básicas sobre pontos de interrupção:
GetId retorna a ID do ponto de interrupção.
GetType retorna o tipo de ponto de interrupção (software ou processador) e o tipo de processador efetivo no qual o ponto de interrupção está definido.
GetAdder retorna o cliente que adicionou o ponto de interrupção.
GetOffset retorna o endereço de um ponto de interrupção.
GetOffsetExpression retorna a cadeia de caracteres de expressão que especifica o local do ponto de interrupção.
Além de sua localização e tipo de ponto de interrupção, um ponto de interrupção tem vários parâmetros controlando seu comportamento.
Os parâmetros do ponto de interrupção podem ser controlados através de uma variedade de métodos específicos. Além disso, a maioria dos parâmetros pode ser consultada em conjunto usando GetParameters.
Sinalizadores de ponto de interrupção
Indicadores de ponto de interrupção são um tipo de parâmetros de ponto de interrupção.
Os sinalizadores de ponto de interrupção podem ser consultados usando GetFlags. Eles podem ser alterados usando AddFlags, RemoveFlags ou SetFlags.
Os sinalizadores de ponto de interrupção formam um campo de bits. Os possíveis sinalizadores que podem ser usados neste campo de bits, e seus significados, são os seguintes:
DEBUG_BREAKPOINT_ENABLED
Quando esse sinalizador é definido, o ponto de interrupção é ativado e terá seu efeito normal. Quando esse sinalizador não é definido, o ponto de interrupção é desativado e não terá qualquer efeito. Se desejar desativar temporariamente um ponto de interrupção, você pode remover esse sinalizador; Em seguida, é fácil adicionar esse sinalizador novamente quando você deseja reativar esse ponto de interrupção.
DEBUG_BREAKPOINT_ADDER_ONLY
Quando esse sinalizador é definido, o ponto de interrupção é um ponto de interrupção privado. Esse ponto de interrupção é visível apenas para o cliente que o adicionou. Nesse caso, outros clientes não poderão consultar o mecanismo para o ponto de interrupção, e o mecanismo não enviará eventos gerados pelo ponto de interrupção para outros clientes. Todos os retornos de chamada (evento e saída) relacionados a este ponto de interrupção serão enviados apenas para este cliente. Consulte GetAdder.
DEBUG_BREAKPOINT_GO_ONLY
Quando este indicador é ativado, o ponto de interrupção só será acionado se o alvo estiver em execução irrestrita. Ele não será acionado se o mecanismo estiver passando pelas instruções no alvo.
DEBUG_BREAKPOINT_ONE_SHOT
Quando esse sinalizador é definido, o ponto de interrupção será removido automaticamente na primeira vez que for acionado.
DEBUG_BREAKPOINT_DEFERRED
Quando esse sinalizador é definido, o ponto de interrupção é adiado. Esse sinalizador é definido pelo mecanismo quando o deslocamento do ponto de interrupção é especificado usando uma expressão simbólica e o mecanismo não pode avaliar a expressão. Sempre que um módulo é carregado ou descarregado no destino, o motor tentará reavaliar a expressão para todos os pontos de paragem cuja localização é especificada usando uma expressão. Os que não podem ser avaliados são assinalados como diferidos. Este sinalizador não pode ser modificado por nenhum cliente.
Outros parâmetros de ponto de interrupção
Os parâmetros do ponto de interrupção também incluem:
Contagem de passes
Se o ponto de interrupção tiver uma contagem de passagens associada, ele não será ativado até que o alvo tenha ultrapassado o ponto de interrupção no número especificado de vezes. A contagem de passes que foi originalmente definida pode ser encontrada usando GetPassCount. O número de vezes restantes que o mecanismo passará pelo ponto de interrupção antes de ser ativado pode ser encontrado usando GetCurrentPassCount. A contagem de passes pode ser redefinida para um novo valor usando SetPassCount.
Tópico do jogo
Se o ponto de interrupção tiver um thread associado a ele, ele será ignorado pelo mecanismo quando for encontrado por qualquer outro thread. O thread pode ser encontrado usando GetMatchThreadId e pode ser alterado usando SetMatchThreadId.
Comando
O ponto de interrupção pode ter um comando associado a ele. O comando é executado quando o ponto de interrupção é ativado. Este comando pode ser encontrado usando GetCommand, e pode ser alterado usando SetCommand.
Tamanho
Se o ponto de interrupção for um ponto de interrupção do processador, ele deve ter um tamanho especificado. Isso determina o tamanho do bloco de memória cujo acesso ativará o ponto de interrupção -- o início do bloco é o local do ponto de interrupção. O tamanho pode ser encontrado usando GetDataParameters, e pode ser alterado usando SetDataParameters.
Tipo de acesso
Se o ponto de interrupção for do processador, deve ter um tipo de acesso. Isso determina o tipo de acesso que ativará o ponto de interrupção. Por exemplo, o ponto de interrupção pode ser ativado se o alvo ler, gravar ou executar a memória especificada pelo ponto de interrupção. O tipo de acesso pode ser encontrado usando GetDataParameters e pode ser alterado usando SetDataParameters.
Parâmetros válidos para pontos de interrupção do processador
Os seguintes tipos de acesso estão disponíveis para pontos de interrupção do processador:
| Valor | Descrição |
|---|---|
DEBUG_BREAK_READ |
O ponto de interrupção será acionado quando a CPU ler a memória no bloco de memória do ponto de interrupção. |
DEBUG_BREAK_WRITE |
O ponto de interrupção será acionado quando a CPU gravar memória no bloco de memória do ponto de interrupção. |
| DEBUG_BREAK_READ | DEBUG_BREAK_WRITE | O ponto de interrupção será acionado quando a CPU ler ou gravar memória no bloco de memória do ponto de interrupção. |
DEBUG_BREAK_EXECUTE |
O ponto de interrupção será acionado quando a CPU buscar a instrução no bloco de memória do ponto de interrupção. |
DEBUG_BREAK_IO |
O ponto de interrupção será acionado quando a porta de E/S no bloco de memória de interrupções for acessada. (Windows XP e Microsoft Windows Server 2003 apenas, somente modo kernel, somente x86) |
Nem todos os tipos e tamanhos de acesso são suportados em todos os processadores. Os seguintes tipos e tamanhos de acesso são suportados:
x86
Todos os tipos de acesso são suportados. DEBUG_BREAK_READ se comporta como DEBUG_BREAK_READ | DEBUG_BREAK_WRITE. O tamanho deve ser 1, 2 ou 4. O endereço do ponto de interrupção deve ser um múltiplo do tamanho.
x64
Todos os tipos de acesso são suportados. DEBUG_BREAK_READ se comporta como DEBUG_BREAK_READ | DEBUG_BREAK_WRITE. O tamanho deve ser 1, 2, 4 ou 8. O endereço do ponto de interrupção deve ser um múltiplo do tamanho.