>rr aspires to be your primary C/C++ debugging tool for Linux, replacing — well, enhancing — gdb. You record a failure once, then debug the recording, deterministically, as many times as you want. The same execution is replayed every time.
>rr also provides efficient reverse execution under gdb. Set breakpoints and data watchpoints and quickly reverse-execute to where they were hit.
Performance overhead of reverse debuggers:
* gdb: >1000x (note: I never tested this one myself; just heard about this overhead in a HN comment a long time ago)
* Microsoft WinDbg TimeTravel Debugger: >40x
* rr: 1.5x
rr is the only one fast enough to be used on a regular basis -- the others are slow enough that they only make sense on particularly nasty bugs (usually memory corruption)
It also supports selective recording so, if this is configured (e.g. selecting certain functions), only a subset of the process execution is actually committed to the trace file, further reducing the overhead.
I'll have to look into selective recording, but I'm not sure how helpful it'll be in my use case (I don't know said library well enough to predict which functions might be causing the bogus values)
GDB does have reverse execution:
https://sourceware.org/gdb/current/onlinedocs/gdb/Reverse-Ex...