26 Comments
- Gregd, on 10/12/2007, -1/+14"However, in order to do what we can, we have decided to release UndoDB free of charge (as in free beer) for non-commercial use, partly to acknowledge our debt to the open-source world, and partly as a form of advertising."
- JeremyBanks, on 10/12/2007, -5/+12Just becuase you have to pay for something, it doesn't make it evil.
- gdog2, on 10/12/2007, -1/+8Hi,
I'm one of the developers of UndoDB; I just wanted to respond to some of your points
1. You're right that sometimes a backtrace is all you need. But that only works where the bug itself is very close to where the effects show themselves. But bugs where the effects manifest themselves some time later are much harder to track down -- and that's where we come in. Also, it's incredibly useful for debugging those bugs that only bite intermittently, because once you've caught the bug in UndoDB you can go back and forth as many times as you like.
2. You're right that the debugger won't undo external actions (it's pretty meaningless -- what does it mean to "unsend" data from a socket?). However, as far the application you're debugging is concerned -- the effects are "undone". Most of the time, this is exactly what you want: you're debugging that application. As for your claim that "this eliminates more than half the places where a bug occurs", I don't know what you mean here. The debugger is for debugging a bug in an application. By definition, the bug occurs inside the application you're debugging.
3. People have been predicting the imminent death of languages like C/C++ since the 80's or earlier. Data show that in absolute terms, there are more programmers of compiled languages than ever (due to the rapidly increasing total number of programmers, the proportion of people using compiled languages is not as high as it used to be).
4. For some value of "cooler". Personally I think it's much cooler to be able to reverse the execution of your program than to inject recompiled code during a debug session. But of course "cool" is pretty subjective, and I'm clearly biased :) - KCorax, on 10/12/2007, -0/+3Not really in vs.net you can only set the point of execution somewhere else. Also once you hit an exception going back is possible only if the original code was in try/catch.
- hackwrench, on 10/12/2007, -0/+3To explain how this feature was implemented in QB, here are some instructions:
In QB's IDE, go to the Debug menu and select "History on".
You can now single step backwards trhough a QB program by pressing Shift+F8.
It was more useful there, because it was occaisionally possible to step backward, write now code and have it dynamically recompile to memory. - hackwrench, on 10/12/2007, -0/+2It's not like this sort of debugger is unheard of, though I don't seem to recall the feature being called "bidirectional".
- eclectro, on 10/12/2007, -0/+2Interesting idea. I think they need to have two pricing tiers - $600 for a comapny, $200 for an individual developer. I think that $500 is out of reach for many individual developers, but I can see scraping together $200 for something like this. Just MHO.
@KCorax - Yes, people are moving away from c/c++. But in the Linux world which this app was written for, c/c++ still dominates. Plus there are tons of legacy code around that needs working on. So an app like this is *very8 relevant. - gdog2, on 10/12/2007, -0/+1It is a duplicate of a previous posting, but note that neither this nor the older posting were made by anyone in any way connected to Undo -- it was a very nice surprise for us to get "dugg" a second time :-)
- hackwrench, on 10/12/2007, -0/+1This feature was in QuickBASIC, at least, and probably in the rest of the Quick line as well.
- podgey22, on 10/12/2007, -1/+2Is this not what VS.net has been allowing me to do for years? I would have thought there would be something already out there for linux
- chryse, on 10/12/2007, -0/+1Microsoft Visual Studio 2005 provides a similar functionality, where you can re run a piece of code again, I think it is not able to restore the variables to the original state when you rerun the code you can edit the code with out restarting the debugging application, that is fix and test the changes you did, this saves allot of time when you need to spend minutes setting up the environment to find and fix a bug.
- gdog2, on 10/12/2007, -0/+1The If you write software professionally, then UndoDB will pay for itself very quickly (it only needs to save you with one nasty bug that would otherwise have taken a few days to track down, and it's paid for itself).
If you do not write software professionally, then you can use UndoDB for free (as in beer). - notfred, on 10/12/2007, -0/+1I think Borland's Turbo debugger was the first to show this - but I guess I'm showing my age.
- gdog2, on 10/12/2007, -0/+1Note that Application Saver simply gives you a trace of the program's execution history. This is not the same as allowing the program to reversed, and its complete state rebuilt. With UndoDB, effectively you get a complete record of every memory location/register at every instruction your program has executed. And that information can be retrieved in a convenient way -- using backwards next/step type instructions. (But note that UndoDB doesn't store all that information; only enough for the data to be reconstructed.)
This is much more powerful than a simple log of trace-points that your application has executed.
There are debuggers that you let step back with languages like Java and Basic, but clearly allowing this on interpreted languages is a much easier thing to do than on unmodified arbitrary binaries, as UndoDB does. - gdog2, on 10/12/2007, -0/+1UndoDB is unique in that it allows bidirectional debugging of binary executable programs.
The Omniscient Debugger (lambadcs.com) is for Java only. (There are actually several bidirectional debuggers for Java.)
Lizard is closer to UndoDB, but it has two key problems:
1. It is unable to debug binaries -- you need to send your source code through a munging tool.
2. It cannot be used to debug programs that make any system calls other than 'read' and 'write' (and 'write' only if it's to stdout). This is a show-stopper for almost any real application. - user98887, on 10/12/2007, -0/+1sounds like a good improvement to me
Problem is though it is built for free tool (gdb), and it's not cheap.
Will have to make do with gdb and fprintf - andrewwl, on 10/12/2007, -0/+0To someone who understand this stuff, what if this debugger breaks in after a program has written random numbers to memory.
Like *pInt = rand();
Or if it breaks in after a previous value was destroyed? Like reversing a = 6; involves restoring a to its value before 6 was assigned, how can it do that? - mmss, on 10/12/2007, -0/+0The program http://lizard.sf.net is GPLed and allows you to do the same things. Also look here... http://www.lambdacs.com/debugger/debugger.html
gdog2: where and why is UndoDB better than these (I suppose that it should be better, as it is payware)? - sio2man, on 10/12/2007, -0/+0Symantec (actually Veritas) has been making a debugger (Application Saver) for years that allows developers to step backwards through c/c++ code, and it's not limited to Linux. It also works on Solaris and Windows (and Java and .Net).
- gdog2, on 10/12/2007, -0/+0Ah, but it does. It's magic :-)
- opusagogo, on 10/12/2007, -2/+1this is a duplicate story from 3 months ago used to generate ad revenue.
- mieses, on 10/12/2007, -1/+0old news?
http://www.digg.com/linux_unix/New_Linux_Debugger_Runs_Programs_in_Reverse_?cshow=1801229 - RWTechgage, on 10/12/2007, -5/+3"Ubuntu hasen't got so successful from being closed up, people are able to build upon it for free."
Yeah.. and I mean there aren't another 1000 distros out there or anything. Or Linux in general. - exsst, on 10/12/2007, -9/+5I never said it was evil, but this looks tacky, and when you're developing with linux, it's best to use opensource so people are able to see the code and improve upon it.
Ubuntu hasen't got so successful from being closed up, people are able to build upon it for free. - exsst, on 10/12/2007, -17/+10Boo, buried... You have to pay for this.
http://undo-software.com/ - KCorax, on 10/12/2007, -9/+2Why this less important than it seems:
- It's not that usefull: if you can determine the problematic stack frame you absolutely can determine the problem. All major debuggers including GDB allow you to do that. Finding the problematic stack frame is the primary concept behind test driven development too.
- There is absolutely now way that this system will allow to undo changes that occured outside the application domain, such as in databases, I/O etc. This eliminates more than half the places where a bug occurs.
- It's marketed to c/c++ . People have been moving away from those languages for quite some time. Especially for corporate development, choosing java or .net is a no brainer.
- There are cooler advancements though: In visual studio and sharpdevelop you can even change the content of a method while the program is running. Being able to fix a bug and continue your.
Also the story is a dupe, this surfaced again a few months ago...


What is Digg?
The Digg Toolbar for Firefox lets you Digg, submit content, and keep track of Digg even when you're not on the Digg site. Download the official