[HN Gopher] Parallel Search Speeds Up Time Travel Debugging by 4x
___________________________________________________________________
Parallel Search Speeds Up Time Travel Debugging by 4x
Author : mark_undoio
Score : 32 points
Date : 2022-06-17 19:20 UTC (3 hours ago)
(HTM) web link (undo.io)
(TXT) w3m dump (undo.io)
| dataflow wrote:
| I don't really understand the premise. So presumably you can't
| "reverse" A = B because you lost the old value of A, right? OK,
| but why did you lose that? If you took the time to pause before
| that instruction and write down B, why didn't you just save the
| value of A as part of that step too? Is it a speed or space
| issue?
| mark_undoio wrote:
| As seoaeu says, we only have the values at the snapshot times
| and need to recompute in between.
|
| We're not actually logging changes to variables, we're only
| logging outside information that changes the course of the
| computation. The variables are a result of that computation and
| not something we store directly.
|
| So there's no explicit saving of A when we set it to B - and
| hence no opportunity to save the previous value of A either.
|
| The reasons are both speed and space, as you suggest, but also
| fidelity of recording.
|
| * If we recorded all variable values explicitly it could become
| very slow to run real world programs due to the extra work
| being done. * Recording all changes could also use a lot of
| storage for even trivial behaviours - e.g. for (i = 0; i <
| 10000000; i++); * Even if you log normal variable values you
| still have to worry about uninitialised memory, stray pointers,
| use after free - i.e. sources or destinations of assignments
| that aren't captured clearly in C language semantics. If we
| want to catch arbitrary bugs we do need to act at a level below
| normal-case language behaviours.
|
| A side effect of this is that the underlying low level engine
| can record other languages with a different layer on top to
| handle language-specific semantics - that's what we do for
| Java.
| seoaeu wrote:
| The problem is that A might be overwritten many times between
| snapshots. So you may know _one_ value for A, but you have to
| simulate execution forward to find out the specific value it
| had when execution reached that line.
| dataflow wrote:
| Ohh, I was thinking of single-stepping. I didn't realize
| snapshots are so coarse. Makes sense for memory usage, I see.
| Thanks!
| ajb wrote:
| Reversible debugging is great. Have spent too much time in my
| life doing "Finnegan" search ("poor old Finnegan had to begin
| again...")
| [deleted]
| WhitneyLand wrote:
| Wish this were available in XCode.
|
| So many opportunities for improved debugging on iOS.
| mark_undoio wrote:
| We wish it were too, even if we don't have the resources to do
| it right now.
|
| More time travel debuggers is good for everyone - it spreads
| awareness and the techniques are pretty applicable across
| languages / platforms.
___________________________________________________________________
(page generated 2022-06-17 23:00 UTC)