debugger winpdb debugging itself a debugger or debugging tool is a computer program that is used to test and debug other programs the target program 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 trap occurs when the program cannot normally continue because of a programming bug or invalid data 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 when the program traps or reaches a preset condition the debugger typically shows the location in the original code if it is a sourcelevel debugger or symbolic debugger commonly now seen in integrated development environments if it is a lowlevel debugger or a machinelanguage debugger it shows the line in the disassembly unless it also has online access to the original source code and can display the appropriate section of code from the assembly or compilation features typically debuggers offer a query processor a symbol resolver an expression interpreter and a debug support interface at its top level some debuggers have the ability to modify 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 eliminating 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 analyzer especially if instruction path lengths are shown most mainstream debugging engines such as gdb and dbx provide consolebased command line interfaces debugger frontends 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 programs 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 still not commonly used yet 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 pl1 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 most modern microprocessors have at least one of these features in their cpu design to make debugging easier hardware support for singlestepping a program such as the trap flag an instruction set that meets the popek and goldberg virtualization requirements makes it easier to write debugger software that runs on the same cpu as the software being debugged such a cpu can execute the inner loops of the program under test at full speed and still remain under debugger control insystem 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 hardware support for code and data breakpoints such as address comparators and data value comparators or with considerably more work involved page fault hardware 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 pincount substitutes for jtag such as bdm spybiwire or debugwire on the atmel avr debugwire for example uses bidirectional signaling on the reset pin debugger frontends some of the most capable and popular debuggers implement only a simple command line interface clioften 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 frontends that allow users to monitor and control subservient clionly debuggers via graphical user interface some gui debugger frontends are designed to be compatible with a variety of clionly debuggers while others are targeted at one specific debugger list of debuggers list of debuggers this article may contain indiscriminate excessive or irrelevant examples please improve the article by adding more descriptive text and removing less pertinent examples see wikipedias guide to writing better articles for further suggestions june 2015 some widely used debuggers are eclipse debugger api used in a range of ides eclipse ide java nodeclipse javascript firefox javascript debugger gdb the gnu debugger lldb microsoft visual studio debugger radare2 valgrind wdw the openwatcom debugger windbg earlier minicomputer debuggers include dynamic debugging technique ddt online debugging tool odt earlier mainframe debuggers include in date of release order 1985 caeztest 1990 xpediter and expediter cics current mainframe debuggers debug tool for zos xpediter and expediter cics zxdc software testing portal computer programming portal comparison of debuggers core dump kernel debugger list of tools for static code analysis memory debugger packet analyzer profiling general sanjeev kumar aggarwal and m sarath kumar 2003 debuggers for programming languages in yn srikant and priti shankar the compiler design handbook optimizations and machine code generation boca raton florida crc press pp295327 isbn9780849312403cs1 maint uses authors parameter link cs1 maint uses editors parameter link jonathan b rosenberg how debuggers work algorithms data structures and architecture john wiley sons isbn0471149667cs1 maint uses authors parameter link specific look up debugger in wiktionary the free dictionary debugging tools for windows openrce various debugger resources and plugins intellitrace msdn visual studio 2015 