1. A system for debugging computer software comprising: a processor; an event monitor; an event collector coupled to the event monitor; an event player coupled to the event collector; and a concurrency error detector coupled to the event player; wherein the computer software being debugged comprises a plurality of events; the event monitor is arranged to execute the computer software being debugged in a kernel space portion of system memory, to monitor each of the plurality of events during the execution of the computer software, and to record data regarding the each event; the event collector, the event player, and the concurrency error detector are each arranged to execute in a user space portion of system memory; the event collector is arranged to read data regarding the each event; the concurrency error detector is arranged to analyze the each event; and the event player is arranged to replay the each event in the user space portion of system memory, to create a partial-order graph of the plurality of events, to determine if an event of the plurality of events is a context entry event, and if the event is a context entry event, to create a surrogate thread and an event queue for the surrogate thread, and to schedule execution of the surrogate thread based on the partial-order graph.