Debuggers are used to identify and fix problems in computer programs. There are several types of debuggers including static debuggers, which insert debugging code directly into the source program, and dynamic interactive debuggers, which can stop, examine, and continue an executing program. Dynamic interactive debuggers include breakpoint debuggers, which allow setting conditional or unconditional breakpoints, meta debuggers which can debug themselves, kernel debuggers for debugging operating systems, and tele-debuggers which execute on a separate computer. Debuggers can also be classified based on whether the debugger and debugged process run in the same or separate processes.