Como são os pontos de interrupção do depurador implementado de forma eficiente?
-
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.
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