1. A non-transitory computer-readable medium having computer-executable instructions for causing a computer system to perform a method for debugging, comprising: receiving a request for capturing a frame generated by a graphics application implementing a plurality of application threads for executing a plurality of function calls generating said frame, wherein said plurality of function calls is associated with one or more thread specific resources used at an entry point of said capturing; for each application thread, determining a corresponding state at said entry point for each corresponding thread specific resource utilized; for each application thread, establishing a corresponding capture stream, wherein application threads and capture streams exist in a one-to-one relationship; for each application thread, capturing executed function calls into said corresponding capture stream; ordering a plurality of captured function calls captured across said plurality of application threads in the order they were executed by said graphics application; for each capture stream, establishing a corresponding replay thread, wherein capture streams and replay threads exist in a one-to-one relationship; and replaying a plurality of captured function calls in the order they were captured, wherein a captured function call is executed in a corresponding replay thread based on which application thread executed said captured function call.