One of the most powerful properties of full-system simulation is that
time inside the simulation and time in the real world are two
completely different things. This brings a number of substantial
benefits:
- You can pause the simulation at any time, and the software
running in the simulation simply cannot detect this. This
allows you to inspect (and optionally modify) the state even at
points where real hardware would be unable to stop.
- You can save the state of the simulation to disk (this is called
a checkpoint), and start again from that point at any time,
any number of times.
- The simulation is completely deterministic. Every time you start
from the same state (such as a checkpoint), the exact same
thing will happen. This can be tremendously useful when hunting down
certain types of bugs.
- The simulation can be reversed, making it possible to answer
questions such as "This value is garbage now. When did this happen,
and who did it?"; simply set a write breakpoint and run backward
until it triggers, and you have your culprit.
These advantages apply to the entire simulated system, whether it is a
single target machine or an entire network.