プログラムを逆方向に実行する


7

プログラムを逆方向に実行できるデバッガーを使用したことはありませんが、使用したいと思います。さて、逆方向実行可能プログラミングについて多くの証拠と理論があるのか​​、いつ、なぜプログラムを逆方向に実行できるのか、いつ、なぜそうしないのか?

直感的には、プログラムが逆方向に実行されることがわかっているため、プログラムが逆方向に実行されると、コンピューターがプログラムを逆方向に実行できるはずです。

デバッグは実際の例にすぎません。私はまた、可逆性の理論のためにそれに興味があります。プログラムを逆方向に実行できる場合、プログラムが行うことは可逆的ですよね。


1
以前は、実用的な観点からリバースデバッグについて考えていました。私はそれがどんなIDEのためのキラープラグインであろうと思います。いくつかの明らかな初期観察があります:1.フォワードモードで変数に書き込む場合、以前の状態を保存する必要があります(たとえば、これには約2.4 GBのメモリ/秒がかかります)。2.余分なメモリを避けたい場合は、デバッグしたい行までプログラムを再実行できます。3.前の2つのポイントの間でトレードオフを行うことができます。4.プログラムにREST呼び出しを行うなどの副作用がある場合は機能しません。
Albert Hendriks、2016年

回答:


3

理論的には、実際にプログラムを逆方向に実行するには、プログラム実行の影響を取り消す必要があります。これを行うことは、メモリの変更に対しては効率的でなくても比較的単純であり、ディスク上の変更に対しては困難であり、ネットワークに対しては不可能です。また、コードが外部状態(時刻、別のプロセスによって変更される可能性のあるディスク上のファイル)に依存している場合、巻き戻して再度実行しても同じ結果は得られません。

実際には、プログラムの実行のある時点でプログラムの状態を確認できるようにすることができますが、その時点から再起動することはできません。この方法では、この状態の巻き戻しでは状態の変更(メモリを除く)を元に戻す必要がないため、外部状態に問題はなく、順方向に進むと常に同じ結果が得られます(コードが実際に再度実行されることがないため)。この形式の巻き戻しはVisual StudioにHistorical Debuggingという名前で実装されていますが、すべての命令またはコード行でのプログラム状態は記録されず、すべてのメソッド呼び出しでのみ記録されます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.