5 ms·
Here's a python program that should be deterministic, but isn't without disabling ASLR: print id(object())
by DanWaterworth 10y ago
Here's a python program that should be deterministic, but isn't without disabling ASLR:
print id(object())
- masklinn 10y agoWhy should this program be deterministic?
- moyix 10y agoReversible debugging (also known as record and replay) requires making the program behave exactly the same way every time. That way you can "execute backward": at statement n of the program, restart it from the beginning, and stop at statement n-1 (in practice you would take snapshots of the program state along the way so you don't have to re-execute all the way from the beginning of the program). In the example given here, you could get away with it since control flow doesn't depend on the value of id(object()). But for example, if you had: if (id(object()) >> 12) & 1: print "foo" else: print "bar" You would need to guarantee that id(object()) always returned the same value so that the execution follows the same path.
- DanWaterworth 10y agoAh, you've caught me out on my sloppy use of English. What I should have said is that the address space layout is a source of non-determinism that would otherwise need to be accounted for in the recording of a program. Further, I hold to the view that given a program, knowledge of the thread execution schedule/scheduler and the results of external calls, a program's execution should be deterministic. Thinking about this now, I realize disabling ASLR shouldn't be enough to fix this problem since recording and replaying are sufficiently different.
- masklinn 10y ago> What I should have said is that the address space layout is a source of non-determinism that would otherwise need to be accounted for in the recording of a program. Ah yes, it needs to be deterministic in the context of a time-traveling debugger, I was thinking about the general case, sorry. > Further, I hold to the view that given a program, knowledge of the thread execution schedule/scheduler and the results of external calls, a program's execution should be deterministic. Surely it is, if you precisely know all timings and IO and can replay them there's nowhere for non-determinism to creep in. That's not really an acceptable scale of required knowledge for a time-traveling debugger though.
- DanWaterworth 10y ago> Surely it is, if you precisely know all timings and IO and can replay them there's nowhere for non-determinism to creep in. This was my original point, the address space layout information leaks into python land via things like id. > That's not really an acceptable scale of required knowledge for a time-traveling debugger though. That's what recording captures (though, you don't need to know the times at which things happened).