Debugger

Uses your system voice; voice and rate in settings.

The name shown is in zu. The article below is in English and is not a translation.

Q18615115Snapshot

≈ 7 min read

Names in other languages

  • afDebuggerxkcd 1163
  • anDebuggerxkcd 1163
  • astDebuggerxkcd 1163
  • barDebuggerxkcd 1163
  • bmDebuggerxkcd 1163
  • brDebuggerxkcd 1163
  • caDebuggerxkcd 1163
  • coDebuggerxkcd 1163
  • ČeštinaDebuggerxkcd 1163
  • cyDebuggerxkcd 1163
  • daDebuggerxkcd 1163
  • DeutschDebuggerxkcd 1163
  • DeutschDebuggerxkcd 1163
  • DeutschDebuggerxkcd 1163
  • EnglishDebuggerxkcd 1163
  • EnglishDebuggerxkcd 1163
  • EnglishDebuggerxkcd 1163
  • eoDebuggerxkcd 1163
  • EspañolDebuggerxkcd 1163
  • etDebuggerxkcd 1163
  • euDebuggerxkcd 1163
  • fiDebuggerxkcd 1163
  • foDebugger
  • FrançaisDebuggerxkcd 1163
  • frcDebuggerxkcd 1163
  • frpDebuggerxkcd 1163
  • furDebuggerxkcd 1163
  • gaDebuggerxkcd 1163
  • gdDebuggerxkcd 1163
  • glDebuggerxkcd 1163
  • gswDebuggerxkcd 1163
  • hrDebuggerxkcd 1163
  • MagyarDebuggerxkcd 1163
  • iaDebuggerxkcd 1163
  • Bahasa IndonesiaDebuggerxkcd 1163
  • ieDebuggerxkcd 1163
  • ioDebuggerxkcd 1163
  • isDebugger
  • ItalianoDebuggerxkcd 1163
  • jamDebuggerxkcd 1163
  • kabDebuggerxkcd 1163
  • kgDebuggerxkcd 1163
  • klDebugger
  • lbDebuggerxkcd 1163
  • liDebuggerxkcd 1163
  • lijDebuggerxkcd 1163
  • ltDebuggerxkcd 1163
  • lvDebuggerxkcd 1163
  • mgDebuggerxkcd 1163
  • minDebuggerxkcd 1163
  • Bahasa MelayuDebuggerxkcd 1163
  • napDebuggerxkcd 1163
  • nbDebuggerxkcd 1163
  • ndsDebuggerxkcd 1163
  • nds-nlDebuggerxkcd 1163
  • NederlandsDebuggerxkcd 1163
  • nnDebuggerxkcd 1163
  • nrmDebuggerxkcd 1163
  • ocDebuggerxkcd 1163
  • papDebuggerxkcd 1163
  • pcdDebuggerxkcd 1163
  • PolskiDebuggerxkcd 1163
  • pmsDebuggerxkcd 1163
  • prgDebuggerxkcd 1163
  • PortuguêsDebuggerxkcd 1163
  • PortuguêsDebuggerxkcd 1163
  • rgnDebuggerxkcd 1163
  • rmDebuggerxkcd 1163
  • RomânăDebuggerxkcd 1163
  • scDebuggerxkcd 1163
  • scnDebuggerxkcd 1163
  • scoDebuggerxkcd 1163
  • skDebuggerxkcd 1163
  • СрпскиDebuggerxkcd 1163
  • SvenskaDebuggerxkcd 1163
  • swDebuggerxkcd 1163
  • TürkçeDebuggerxkcd 1163
  • vecDebuggerxkcd 1163
  • Tiếng ViệtDebuggerxkcd 1163
  • vlsDebuggerxkcd 1163
  • vmfDebuggerxkcd 1163
  • voDebuggerxkcd 1163
  • waDebuggerxkcd 1163
  • woDebuggerxkcd 1163
  • zuDebuggerxkcd 1163

Article bodies are English and are not machine-translated. A name in another language is not a translation of the article.

A debugger is software for executing a computer program in an environment that allows for programming-level inspection and control. A debugger is often used to debug, but can be used for other goals including testing. Common features of a debugger include stepping through code line-by-line, breaking into the program's flow of control, managing breakpoints, and reporting and modifying memory. A source-level debugger (a.k.a. symbolic debugger) provides a user experience that integrates the program's source code. Typically, such a debugger can indicate which line of source code corresponds to the execution point of the program and allows for reading and writing memory via the symbols of the source code. In contrast, a low-level debugger (a.k.a. machine-language debugger) shows the execution point as machine code or its associated assembly language and allows memory access by address only. The code to be examined might alternatively be running on an instruction set simulator (ISS), a technique that allows great power in its ability to halt when specific conditions are encountered, but which will typically be somewhat slower than executing the code directly on the appropriate (or the same) processor. Some debuggers offer two modes of operation, full or partial simulation, to limit this impact.

A debugger is software for executing a computer program in an environment that allows for programming-level inspection and control. A debugger is often used to debug, but can be used for other goals including testing. Common features of a debugger include stepping through code line-by-line, breaking into the program's flow of control, managing breakpoints, and reporting and modifying memory. A source-level debugger (a.k.a. symbolic debugger) provides a user experience that integrates the program's source code. Typically, such a debugger can indicate which line of source code corresponds to the execution point of the program and allows for reading and writing memory via the symbols of the source code. In contrast, a low-level debugger (a.k.a. machine-language debugger) shows the execution point as machine code or its associated assembly language and allows memory access by address only. The code to be examined might alternatively be running on an instruction set simulator (ISS), a technique that allows great power in its ability to halt when specific conditions are encountered, but which will typically be somewhat slower than executing the code directly on the appropriate (or the same) processor. Some debuggers offer two modes of operation, full or partial simulation, to limit this impact.

Features

Typically, debuggers offer a query processor, a symbol resolver, an expression interpreter, and a debug support interface at its top level. Debuggers also offer more sophisticated functions such as running a program step by step (single-stepping or program animation), stopping (breaking) (pausing the program to examine the current state) at some event or specified instruction by means of a breakpoint, and tracking the values of variables. Some debuggers have the ability to modify the program state while it is running. It may also be possible to continue execution at a different location in the program to bypass a crash or logical error. The same functionality which makes a debugger useful for correcting bugs allows it to be used as a software cracking tool to evade copy protection, digital rights management, and other software protection features. It often also makes it useful as a general verification tool, fault coverage, and performance analyser, especially if instruction path lengths are shown. Most mainstream debugging engines, such as gdb and dbx, provide console-based command line interfaces. Debugger front-ends are popular extensions to debugger engines that provide IDE integration, program animation, and visualization features.

Reverse debugging

Some debuggers include a feature called "reverse debugging", also known as "historical debugging" or "backwards debugging". These debuggers make it possible to step a program's execution backwards in time. Various debuggers include this feature. Microsoft Visual Studio (2010 Ultimate edition, 2012 Ultimate, 2013 Ultimate, and 2015 Enterprise edition) offers IntelliTrace reverse debugging for C#, Visual Basic .NET, and some other languages, but not C++. Reverse debuggers also exist for C, C++, Java, Python, Perl, and other languages. Some are open source; some are proprietary commercial software. Some reverse debuggers slow down the target by orders of magnitude, but the best reverse debuggers cause a slowdown of 2× or less. Reverse debugging is very useful for certain types of problems, but is not commonly used.

Time travel debugging

In addition to the features of reverse debuggers, time travel debugging also allow users to interact with the program, changing the history if desired, and watch how the program responds.

Language dependency

Some debuggers operate on a single specific language while others can handle multiple languages transparently. For example, if the main target program is written in COBOL but calls assembly language subroutines and PL/1 subroutines, the debugger may have to dynamically switch modes to accommodate the changes in language as they occur.

Memory protection

Some debuggers also incorporate memory protection to avoid storage violations such as buffer overflow. This may be extremely important in transaction processing environments where memory is dynamically allocated from memory 'pools' on a task by task basis.

Hardware support for debugging

Some processors have hardware support for single-stepping a program, such as the trap flag. Most modern microprocessors have at least one of these features in their CPU design to make debugging easier: Hardware support for code and data breakpoints, such as address comparators and data value comparators or, with considerably more work involved, page fault hardware. In-system programming allows an external hardware debugger to reprogram a system under test (for example, adding or removing instruction breakpoints). Many systems with such ISP support also have other hardware debug support. JTAG access to hardware debug interfaces such as those on ARM architecture processors or using the Nexus command set. Processors used in embedded systems typically have extensive JTAG debug support. Micro controllers with as few as six pins need to use low pin-count substitutes for JTAG, such as BDM, Spy-Bi-Wire, or debugWIRE on the Atmel AVR. DebugWIRE, for example, uses bidirectional signaling on the RESET pin.

Debugger front-ends

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. This is the reason for visual front-ends, that allow users to monitor and control subservient CLI-only debuggers via graphical user interface. Some GUI debugger front-ends are designed to be compatible with a variety of CLI-only debuggers, while others are targeted at one specific debugger.

See also

External links

Debugging Tools for Windows OpenRCE: Various Debugger Resources and Plug-ins IntelliTrace for Visual Studio Enterprise (C#, Visual Basic, C++)

Text derived from https://en.wikipedia.org/w/index.php?oldid=1368345456 under CC BY-SA 4.0; modifications have been made.

Sources cited in this revision

Extracted from the cited revision's reference blocks; absent citations are not invented.