Eu nunca usei um depurador que pode executar um programa para trás, mas gostaria. Agora, pergunto-me se há muita evidência e teoria sobre programação executável reversa, quando e por que um programa pode ser executado inversamente ou quando e por que não?
Intuitivamente, acho que o computador deve ser capaz de executar o programa para trás, se ele tiver executado o programa para a frente sabendo que o programa será executado para trás, salvando estados do programa que, de outra forma, poderiam se perder e desalocar.
A depuração é apenas um exemplo prático. Também estou interessado por causa da teoria da reversibilidade; se o programa pode ser executado de trás para frente, o que o programa faz é reversível, não é?
automata
programming-languages
Niklas
fonte
fonte
Respostas:
Em teoria, para executar o programa para trás seria necessário desfazer quaisquer efeitos da execução do programa. Isso deve ser relativamente simples, se ineficiente, para alterações de memória, mais difícil para alterações no disco e impossível para a rede. E se o código depender de qualquer estado externo (hora do dia, arquivo no disco que pode ser modificado por outro processo), rebobinar e executá-lo novamente não produzirá o mesmo resultado.
Na prática, o que é possível é permitir que você observe o estado do programa em algum momento de sua execução, mas sem permitir que você reinicie a partir desse ponto. Dessa forma, não há problemas com o estado externo, porque essa forma de rebobinar não precisa desfazer nenhuma alteração de estado (exceto a memória) e avançar sempre produzirá o mesmo resultado (porque o código não é realmente executado novamente). Essa forma de rebobinagem é implementada no Visual Studio, com o nome Depuração Histórica , embora não registre o estado do programa em todas as instruções ou linhas de código, apenas em todas as chamadas de métodos.
fonte
Há muita pesquisa sobre esse assunto. Eu já vi isso chamado "depuração de viagem no tempo" na literatura, às vezes "depuração reversa". Alguns minutos no Google Scholar devem gerar várias publicações de pesquisa sobre o assunto.
Consulte também https://softwareengineering.stackexchange.com/q/181527/34181 e https://stackoverflow.com/q/1470434/781723 .
fonte