1. An apparatus comprising: at least one processor; a memory coupled to the at least one processor; a program residing in the memory, the program comprising a plurality of threads executed by the at least one processor; a debugger residing in the memory and executed by the at least one processor, the debugger debugging the program, the debugger comprising: a thread holding mechanism that analyzes the plurality of threads when the debugger halts execution of the program and determines whether any of the plurality of threads are currently executing system code external to the program, and for each of the plurality of threads that are currently executing system code external to the program, delaying the holding of the thread by the debugger until at least one condition is satisfied.