Como são os pontos de interrupção do depurador implementado de forma eficiente?

StackOverflow https://stackoverflow.com/questions/859023

  •  21-08-2019
  •  | 
  •  

Pergunta

Às vezes eu acumular uma grande massa de pontos de interrupção de diferentes sessões de depuração em lugares diferentes no meu código. Como é que o depurador saber eficiente quando parar para um ponto de interrupção? Ele não pode ser parando em cada linha para verificar o nome número da linha e fonte de arquivo contra uma potencialmente longa lista de pontos de interrupção, pode?

Este é o depurador Java em Eclipse, mas eu presumo que a questão se aplica a qualquer depurador.

Foi útil?

Solução

A estratégia utilizada em muitos depuradores (Eu não sei sobre Eclipse) é colocar um patch para o código no ponto de ponto de interrupção que é essencialmente uma chamada de sub-rotina ou chamada de sistema. O código saltou para tem a informação de ponto de interrupção, e faz o que quer imprimir ou aceitação de comandos do usuário, e também tem o código que foi substituído com o patch, para que o código pode ser executado para fazer a execução coincidir com o código original, sem o ponto de interrupção

Outras dicas

Para adicionar a boa resposta do Nadreck:

Há um artigo aqui com mais detalhes, incluindo algumas das coisas mais exótico (específicos opcodes em x86;. pontos de interrupção de hardware)

Os depuradores implementar pontos de interrupção no hardware ou software. Este último exige salvar a instrução original, inserindo um código especial que gera uma exceção e quando a exceção é gerada, reinserindo a instrução original e deixar o know usuário de que o ponto de interrupção foi atingido. Leia meu artigo para os detalhes sobre pontos de interrupção de software.

Você pode obter as informações completas sobre as partes internas do Eclipse Debugger e como escrever um no link abaixo Como escrever um Eclipse Debugger

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top