From Wikipedia, the free encyclopedia
A debugger is a computer program that is used to test and debug other programs. 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 much slower than executing the code directly on the appropriate processor.
When the program crashes, the debugger shows the position in the original code if it is a source-level debugger or symbolic debugger, commonly seen in integrated development environments. If it is a low-level debugger or a machine-language debugger it shows the line in the disassembly. (A "crash" happens when the program can't continue because of a programming bug. For example, perhaps the program tried to use an instruction not available on the current version of the CPU or attempted access to unavailable or protected memory.)
Typically, debuggers also offer more sophisticated functions such as running a program step by step (single-stepping), stopping (breaking) (pausing the program to examine the current state) at some kind of event by means of breakpoint, and tracking the values of some variables. Some debuggers have the ability to modify the state of the program while it is running, rather than merely to observe it.
The same functionality which makes a debugger useful for eliminating accidental bugs allows it to be used as a cracking tool to learn how to evade copy prevention and other programmed limitations.
Debuggers make the debugging process much easier and faster, to the point where the availability of a good one for a particular language and platform can sway the decision to use that language rather than another language that is superior in other respects but lacks such tools.
An important difficulty is that software running under a debugger might behave differently than software running normally, because a debugger changes the internal timing of a software program. That makes it often very difficult to track down runtime problems in complex multi-threaded or distributed systems.
Some people find traditional debuggers (utilizing single line commands) hard to work with, and use instead a front-end incorporating animation and more sophisticated tools some examples of which are listed below.
- XSLT and XQuery debugger in the Oxygen XML Editor
- Allinea Distributed Debugging Tool (DDT) (DDT)
- BDebug, part of Barfly Assembler Development System
- CA/EZTEST (Cics Interactive test/debug)
- dbg PHP Debugger and Profiler
- dbg Library
- DEBUG DOS Command
- Dynamic debugging technique (DDT), and its octal counterpart ODT
- e2dbg the Embedded ELF
- Etnus TotalView
- GNU Debugger (GDB)
- IDA Pro 
- Java Platform Debugger Architecture
- NoIce- an embedded systems debugger
- OLIVER (CICS interactive test/debug)
- Prism Parallel Debugger
- SIMON (Batch Interactive test/debug)
- T-Bug, the integrated debugger in Perl 5
- Turbo Debugger
- The Visual Studio Debugger
- Debugger front-end
- Profiler (computer science)
- Computer programming
- Software testing
- Memory debugger
- Core dump
- Anomaly in software
- Jonathan B. Rosenberg, How Debuggers Work: Algorithms, Data Structures, and Architecture, John Wiley & Sons, ISBN 0-471-14966-7
- Learn the essentials of debugging How to improve your debugging skills, a good article at IBM developerWorks.
- OpenRCE: Various Debugger Resources and Plug-ins