Yep. Amazing tool. Being to record an execution without much slowdown (~10% IIRC) and replay and suspend it in any direction to deterministically reproduce a strange behavior that can be a race condition is great. I wish Java and JavaScript had something like this in open source.
For the record, it was built at Mozilla to debug Firefox, so it can handle big programs.
I think the biggest limitations are:
- It was historically Intel only, though apparently some AMD and ARM64 CPUs are supported now
- it supports multithreaded executions, but they will be serialized, during record and during replay.
It works by recording the results of syscalls. It turns out this is sufficient to accurately reproduce an execution when you have removed scheduling/threading issues.
Another caveat is that rr is now essentially the open core of Pernosco. I'm not sure what Pernosco brings to the table, I think it is a convenient UI on top of rr, so actual core features would land in rr I guess.
And for checkpointing an execution and replaying it with the ability to change course, you have CRIU (Checkpoint and Restore In Userspace) (in case you are eager for more wizardry)
For the record, it was built at Mozilla to debug Firefox, so it can handle big programs.
I think the biggest limitations are:
- It was historically Intel only, though apparently some AMD and ARM64 CPUs are supported now
- it supports multithreaded executions, but they will be serialized, during record and during replay.
It works by recording the results of syscalls. It turns out this is sufficient to accurately reproduce an execution when you have removed scheduling/threading issues.
Another caveat is that rr is now essentially the open core of Pernosco. I'm not sure what Pernosco brings to the table, I think it is a convenient UI on top of rr, so actual core features would land in rr I guess.
And for checkpointing an execution and replaying it with the ability to change course, you have CRIU (Checkpoint and Restore In Userspace) (in case you are eager for more wizardry)