1. A method of debugging software, comprising: preserving a first context generated by executing a first software program on a first processor; and providing the first context to a simulator, wherein the simulator is configured to simulate the first processor; and executing the first software program on the simulated first processor using the first context.