A brief survey of time-travelling debuggers[1]. What [1] does not note is that it was <i>heavily</i> studied in relation to Prolog in the late 80s and early 90s. Some very fancy shenanigans were possible including scripts watching variable bindings and actions. Some of this becomes evident if the Pancake bibliography is scanned[2].<p>It's exciting seeing the dream of the 70s come alive. :-)<p>[1] <a href="http://jakob.engbloms.se/archives/1554" rel="nofollow">http://jakob.engbloms.se/archives/1554</a><p>[2] <a href="http://web.engr.oregonstate.edu/~pancake/papers/biblio/" rel="nofollow">http://web.engr.oregonstate.edu/~pancake/papers/biblio/</a>
I'm a big fan of Chronon[1] for Java. Run a program and record everything about it. Use the same eclipse debug interface as always, but also have the ability to re-wind to an earlier point. Check out the state of any variable in the code, at any time. It knows about threads, can reproduce inputs/outputs, etc.<p>I believe it is now integrated with intellij as well.<p>No connection to the product, other than the fact that I paid for it. Unfortunately it doesn't seem to be very well marketed.<p>From what I recall (last few months I've been away from Java), you can't modify anything and re-run it (which Elm's debugger seems to be able to do).<p>[1]<a href="http://chrononsystems.com/" rel="nofollow">http://chrononsystems.com/</a>
This is some incredible work. I am writing a game engine and Elm has been a major influence. I've written a functional reactive programming API, but I'm far away from having such awesome interactive debugging. Thank you, Elm, for the awesome software and providing such good learning material. I was struggling to understand FRP until I came across Elm's "What is FRP?" page. <a href="http://elm-lang.org/learn/What-is-FRP.elm" rel="nofollow">http://elm-lang.org/learn/What-is-FRP.elm</a>
At the Elm Workshop 2013 ( <a href="https://www.youtube.com/channel/UCzbnVYNyCwES9u3dqYZ-0WQ/videos" rel="nofollow">https://www.youtube.com/channel/UCzbnVYNyCwES9u3dqYZ-0WQ/vid...</a> ) several interesting features like this one were demonstrated. Many of which were brought to proof-of-concept level in 1-3 man-weeks each.
If you're interested in this sort of code editing with live feedback of results, checkout Choc <a href="http://www.fullstack.io/choc/" rel="nofollow">http://www.fullstack.io/choc/</a> - a project we worked on earlier this year.<p>You can use vanilla javascript, step through the execution of each line of code, get a human readable description of what the line is doing, scrub constants, etc.<p>There's even a minecraft-like demo building a tower in voxel.js.
One improvement that this has over most of the "conventional" reversible debuggers mentioned in the comments is the ability to instantly see the effect of your change over time. For example, with Mario example, after jumping up and down, you can adjust the gravity parameter to see what paths Mario <i>would have taken</i> with different gravities and the same input stream.
If you are interested in this, check Factor's toolchain it's a great environment.<p>See: <a href="http://factorcode.org/" rel="nofollow">http://factorcode.org/</a> & <a href="http://concatenative.org/wiki/view/Factor/Features/The%20environment" rel="nofollow">http://concatenative.org/wiki/view/Factor/Features/The%20env...</a>
Is Elm production ready or is more of a hobby kind of project?<p>I would invest some time in learning this if it's good for production ready applications.
Is this a souped-up version of Visual Studio Ultimate's[1] IntelliTrace[2]?<p>[1] retailing for over $10,000: <a href="http://www.microsoftstore.com/store/msusa/en_US/pdp/Visual-Studio-Ultimate-2013-with-MSDN/productID.284832100" rel="nofollow">http://www.microsoftstore.com/store/msusa/en_US/pdp/Visual-S...</a><p>[2] <a href="http://msdn.microsoft.com/en-us/library/dd264915.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/dd264915.aspx</a>
What do you mean, "finally implemented"? I thought that Bret Victor himself was doing it using his own Tangle.JS library?<p><a href="http://worrydream.com/Tangle/" rel="nofollow">http://worrydream.com/Tangle/</a>
How much overhead does this add and how difficult would it be to implement in another language like Python or even C? I imagine implementing it for an interpreted language would be much easier if you could save and recover states at any given point.<p>For example, in a project I just completed where we implemented Scheme in C, perhaps we could just memcopy everything and add it to a stack upon each expression evaluation (much easier in Lisp dialects since expressions are nested and you could 'edit as you go' by just changing an inner expression).
Any resource in how made a debugger? This is a step where I can't find a simple explanation (ie: for a self-made language: how make a debugger for it?)
intellij and many java IDEs do something similar with utils like mvl to change stack-history ,replay and to a minimal extent hot-swap byte-code in all standard-JREs.
With JVMs like Zing , however a lot more of hot-swap seems possible!
What is the limitation of this? I mean if I'm reading a text file that is a map, and I delete part of it, I'm guessing this is quite impossible to reverse debug correct?
gdb already has had reverse debugging for 5 years.
<a href="http://sourceware.org/gdb/wiki/ReverseDebug" rel="nofollow">http://sourceware.org/gdb/wiki/ReverseDebug</a>
Seriously? This is essentially a static HTML page, why is it completely useless unless JavaScript is enabled?<p>EDIT: Useless meaning there is 0 content that can be seen. It's not that it's ugly w/o JS, there is nadda, zilch, nothing without it.