Some debuggers offer two modes of operation, full or partial simulation, to limit this impact.
For example, the program might have tried to use an instruction not available on the current version of the CPU or attempted to access unavailable or protected memory.
Typically, debuggers offer a query processor, a symbol resolver, an expression interpreter, and a debug support interface at its top level.
It often also makes it useful as a general verification tool, fault coverage, and performance analyzer, especially if instruction path lengths are shown.
Most mainstream debugging engines, such as gdb and dbx, provide console-based command line interfaces.
Some debuggers also incorporate memory protection to avoid storage violations such as buffer overflow.
Most modern microprocessors have at least one of these features in their CPU design to make debugging easier: Some of the most capable and popular debuggers implement only a simple command line interface (CLI)—often to maximize portability and minimize resource consumption.
Developers typically consider debugging via a graphical user interface (GUI) easier and more productive.