Reverse Debugging and Other Stories

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • Scout APM - Truly a developer’s best friend
  • InfluxDB - Build time-series-based applications quickly and at scale.
  • Zigi - Workflow assistant built for devs & their teams
  • Sonar - Free webinar: The Power of Clean C++
  • rr

    Record and Replay Framework

    "Time travel debugging" seems to be taking off as the term - "reverse debugger" was around for a long time but doesn't seem to have taken root. It has fixed the conversation of "We make a reversible debugger", "Ah so you put the bugs in", though!

    > rr is amazing but it doesn't work well in cloud environments where it needs you to configure settings in the virtual machine (which you can't). So this limits it to desktop Linux machines.

    Hopefully we'll see cloud environments find a way to expose more of the hardware performance counter stuff by default. The alternative is to use an instrumentation-based system that doesn't need access to performance counters. That said, as with machine-level virtualisation, it'd be nice to see the CPU vendors provide more explicit hardware support over time to make implementation easier / higher performance than current approaches.

    > Valuable, but not as valuable as some other options. Plus, using GDB is. Ugh.

    Looks like there's some support / guidance for using an IDE interface to rr's GDB - https://github.com/rr-debugger/rr/wiki/Using-rr-in-an-IDE

    There's also Pernosco https://pernos.co/ which is a cloud service (hosted versions possible) from the original developers of rr. It post-processes uploaded rr traces into a database. This post-processing is compute-intensive but happens on their beefy worker machines. Once it's done, they can retrieve program state across time almost instantly - their website is worth checking out for some examples.

    At Undo (disclaimer: where I work) we've got a VS Code plugin that's being very actively developed https://marketplace.visualstudio.com/items?itemName=Undo.udb to make it easier to expose the time travel stuff in our LiveRecorder product.

    > Replay is pretty impressive, but front-end issues don't have as much state as other issues and are typically easier to track. It isn't great with long recordings so you can't just "leave it running".

    Are you referring to replay.io here? (I was not sure whether you were talking about a replay behaviour in Jive - this is the risk of company / product names that are verbs, a problem we also have!)

    I've not used their stuff but the debug interface they provide looks really intuitive. They support recording Node so I presume they can do some backend stuff too? (Assuming it's in JS).

    Looks like they want to apply their techniques to other languages eventually.

  • devtools

    Replay.io DevTools (by replayio)

    Yep, this is why we're building a time-travel debugger for JS at https://replay.io .

    The basic idea of Replay: Use our special browser or Node forks to make a recording of your app, load the recording in our debugger, and you can pause at _any_ point in the recording. In fact, you can add print statements to any line of code, and it will show you what it _would_ have printed _every time that line of code ran_!

    From there, you can jump to any of those print statement hits, and do typical step debugging and inspection of variables. So, it's the best of both worlds - you can use print statements and step debugging, together, at any point in time in the recording.

    We record the OS-level syscalls from the browser, and replay those in the cloud against hundreds of process forks of the exact browser version while you're debugging. When you step backwards, evaluate a print statement that ran many times, or jump to a different pause point, the backend is using those many forked processes to evaluate those results and ship the info to the debugging client.

    I can say that we personally use Replay to debug our own dev work on Replay on a daily basis, and it makes a _huge_ difference. I recently used Replay to debug an obscure E2E test failure ( https://twitter.com/acemarke/status/1547682026181996554 ), and a bug with React-Redux v8's `connect` and React's experimental `` ( https://twitter.com/acemarke/status/1559643125865390083 ).

    See https://replay.io/record-bugs for the getting started steps to use Replay, and we've got some neat articles about some of the technology at https://docs.replay.io/docs/how-replay-works-2adcccaf8f7743f... .

    If you've got any questions, please come by our Discord and ask! https://replay.io/discord

  • Scout APM

    Truly a developer’s best friend. Scout APM is great for developers who want to find and fix performance issues in their applications. With Scout, we'll take care of the bugs so you can focus on building great things 🚀.

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts