Executando programas para trás


7

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 é?


11
Eu estive pensando em depuração reversa antes de uma perspectiva prática. Eu acho que seria um plugin matador para qualquer IDE. Existem algumas observações iniciais óbvias: 1. Ao gravar em uma variável no modo de avanço, você precisa armazenar seu estado anterior (por exemplo, isso custa ~ 2,4 GB de memória / s). 2. Se você deseja evitar a memória extra, é possível executar novamente o programa até a linha na qual deseja depurar. 3. Você pode fazer uma troca entre os dois pontos anteriores. 4. Não funciona se o programa tiver efeitos colaterais, como fazer uma chamada REST.
Albert Hendriks

Respostas:


3

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.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.