2017-02-08 4 views
5

うーん...私の先生、私のクラスメートのいくつかと私はデバッガプロジェクトを構築するつもりです。デバッガがインタラクティブであることを願っています。つまり、コードを入力すると、数秒後に結果が表示され、入力コードが変更されたときに結果が変わります。一方、実行中のでは、 を前の行またはブレークポイントにロールバックできます。"タイムトラベルデバッガ"の原則は何ですか?

私の先生の言葉によれば、「タイムトラベルデバッグ」というテクニックは、プログラミング中に行われます。他の人が管理しているプロジェクトをいくつか検索しましたが、コードを理解しづらいことがあります。また、READMEファイルにはこのテクニックについては紹介されていません。

参照: https://github.com/mattgodbolt/compiler-explorer

+5

あなたの先生はDr. Whoのファンでしょうか? "Time Travel Compiling"は標準的な用語ではありません。彼らが作った言葉のようだ。あなたはそれが意味することを彼らに尋ねることができます。 –

+0

デバッガでブレークポイントを設定してからステートメントをstep * backwards *実行すると、ブレークポイントの前の*ポイントでランタイム環境の状態を確認できます。 – Pointy

+0

そして、実際には*コンパイラ*とはまったく関係ありません。それはランタイムシステムのものです。まあ、私は*推測*コンパイラは何らかの監査コンテキストを維持するためのコードを生成することができますが、それは事を行うのは本当に奇妙な方法のようです。 – Pointy

答えて

6

これは、最も一般的に「タイムトラベルのデバッグ」として知られ、多くの場合、「官能性反応性プログラミング」に関連しています。 (これらは簡単に検索できる用語です)Elm Languageブログには合理的にアクセス可能な文書がありますが(例えばtime travel made easy)、中に潜入して時間を浪費するのではなく、最初からやり直すことをお勧めします

厳密に言えば、タイムトラベルのデバッグは、実行時に起こるものですが、関数型言語(Haskell、Elm、OCAML、またはさまざまな言語など)でプログラミングしている場合はずっと簡単です。デバッガが実装されているもの)、これらの言語をコンパイルする(はい、コンパイルされている)など、いくつかの面白い概念があります。

Elmはjavascriptにコンパイルするため、実験が比較的簡単です。

プロジェクトを楽しんでください。

+0

AFAIKはすべての純粋な関数型プログラミングで使用することができます。反応性? –

+0

@Guy:そうではありません。実際には、非機能プログラミングでも使用できます。 javascript用のタイムトラベルデバッガがあります。これは明らかに関数型プログラミング言語ではありません。私が言ったことは、FRPに関連していることが多いということです。これは、より多くの情報を検索するためにOPにいくつかのポインタを与えることを意図していました。 OCAMLを第2段落の関数型言語のリストに追加しました。 – rici

+0

[Visual Studio IntelliTrace](https://msdn.microsoft.com/en-us/library/dd264915.aspx) –

1

タイムトラベルのデバッグ逆デバッグとして知られています。素人の言葉では、同じ行を何度もデバッグすることができます(アプリケーションを停止/再起動することなく)。

たとえば、例外の原因を調べるために、10行目で例外をスローしたメソッドをデバッグしているときに、完全なデバッグプロセスを再開せずに4行目としましょう。それはすべてリアルタイムかつ非常に効率的です。

私はこの機能をVisual Studioで使用しました。

関連する問題