A Debugger a computer program used by programmers to test and debug a target program. Debuggers may use instruction-set simulators, rather than running a program directly on the processor, to achieve a higher level of control over its execution. This allows debuggers to stop or halt the program according to specific conditions. However, use of simulators decreases execution speed.
When a program crashes, debuggers show the position of the error in the target program. Most debuggers also are capable of running programs in a step-by-step mode, besides stopping on specific points. They also can often modify the state of programs while they are running.